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之后,基本会跑平。
我们做了时间埋点:
- ot原始时间,
- rt c程序收到数据时间,
- st c程序Produce时间,
- kt Kafka logAppend时间,
- 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
c语言发送的时候,有没有同步发送和异步发送的概念?
java很多是默认是异步
应该是异步发送的
你的答案