kafka C程序Producer堆积

风清 发表于: 2020-04-26   最后更新时间: 2020-04-26 11:11:32   1,593 游览

Kafka server版本: 1.0.2
所用API: https://github.com/edenhill/librdkafka

现象

Mean message/sec : 3k
Peak Messages/5Min: 130w
Mean Bytes in /sec: 600KB/s

从Kafka Eagle页面观测,5分钟粒度消息数曲线在达到峰值130w条消息/5min之后,基本会跑平。
我们做了时间埋点:

  1. ot原始时间,
  2. rt c程序收到数据时间,
  3. st c程序Produce时间,
  4. kt Kafka logAppend时间,
  5. wt Hdfs落盘时间

ot和kt的时差越来越多,KE 5分钟曲线在跑平之后,一开始kt-ot=15分钟,到了凌晨0点,kt-ot甚至达到4个小时

尝试

Kafka主题分区

一开始16个,后来改为128个,没有明显效果

Producer端配置

一开始只有如下配置:

conf->set("queue.buffering.max.messages", "1000000", errstr);

后来陆续调整了下面的参数, 不同参数设置了不同的值,参数之间也各种排列组合:

"batch.num.messages" = 1000
"queue.buffering.max.ms" = 1000
"message.send.max.retries" = 5
"message.timeout.ms" = 60_000
"retry.backoff.ms" = 100
"socket.keepalive.enable" = true

ack也分别尝试了0,1,all,仍然是有“堆积”的现象。
Producer侧的内存是逐渐增长的过程。

到了凌晨2-3点,KE页面的5分钟消息数曲线,会看到明显的断崖式结束,而不是平滑的下降(业务量应该是平滑下降的)

数据整体是没有丢失的,但感觉像是buffer在了producer端,没有及时的吐出来。

对比Java API程序

我们另有主题B是集群内部的通过Flink生产的数据,频度比问题主题的数据要高,5分钟消息数峰值在1700W,是没有这种严重的延迟的;

也有主题,数据频度不高,但是消息size比问题主题大的,也没有类似现象。

问题

无法明确定位是Kafka server的瓶颈,还是Producer的用法有问题?

请指教,谢谢
2020-04-26

发表于 2020-04-26
添加评论

c语言发送的时候,有没有同步发送和异步发送的概念?
java很多是默认是异步

风清 -> 半兽人 4年前

应该是异步发送的

你的答案

查看kafka相关的其他问题或提一个您自己的问题