【发布时间】:2018-03-07 11:33:16
【问题描述】:
我在 3 台服务器上有 Kafka 集群。 有一个topic,一个partition,3个replicas。 平均消息约为 200 字节。
我希望多个消费者(即具有不同组 ID)从主题中读取,因此每个消费者都会收到所有数据。
问题是每个新消费者都比以前慢,所以在添加大约 20 个消费者后,新消费者非常慢。
下表显示了问题:
topic consumer current offset
topic-0 group-1 4191232
topic-0 group-4 3860979
topic-0 group-2 3799224
topic-0 group-12 2112518
topic-0 group-7 1984491
topic-0 group-3 1842349
topic-0 group-6 1695504
topic-0 group-11 1388133
topic-0 group-5 1383794
topic-0 group-19 1242424
topic-0 group-16 941960
topic-0 group-14 876551
topic-0 group-22 837359
topic-0 group-21 828698
topic-0 group-13 811273
topic-0 group-26 716414
topic-0 group-9 699175
topic-0 group-18 621772
topic-0 group-15 617520
topic-0 group-17 613233
topic-0 group-10 388891
topic-0 group-8 328258
topic-0 group-24 233805
topic-0 group-29 131299
topic-0 group-23 84658
topic-0 group-20 80492
topic-0 group-27 63527
topic-0 group-25 50720
topic-0 group-28 46474
topic-0 group-30 37958
这些消费者几乎是同时启动的,大约20秒后捕获到这个状态。 group-1 读取了 419 万条记录,group-30 只读取了 37958 条记录。
消费者分布因运行而异,但总是有慢消费者。
我尝试在专用服务器上和本地 Kafka 集群上运行消费者 - 情况没有改变。
慢消费者的日志消息表明往返时间很长,有时超过一秒
kafka3:9092/3: Sent FetchRequest (v4, 93 bytes @ 0, CorrId 36322)
kafka3:9092/3: Received FetchResponse (v4, 1048636 bytes, CorrId 36322, rtt 747.24ms)
这个问题可以用 kafka 控制台消费者和 librdkafka 重现,所以 我认为经纪人有问题。
我已将代理配置中的 num.io.threads 和 num.network.threads 参数设置为 32,但没有帮助。其他参数默认。
任何帮助将不胜感激。
更新 1
broker 上慢消费者的日志消息表明问题肯定出在 broker 端:
[2018-03-07 12:58:42,787] DEBUG Completed request:RequestHeader(apiKey=OFFSET_COMMIT, apiVersion=1, clientId=rdkafka, correlationId=376) -- {group_id=group-12,generation_id=13,member_id=rdkafka-5c08ffd4,topics=[{topic=test-topic,partitions=[{partition=0,offset=651909,timestamp=-1,metadata=}]}]},response:{responses=[{topic=test-topic,partition_responses=[{partition=0,error_code=0}]}]} from connection kafka3:9092-client12:37884-10;totalTime:1547.433,requestQueueTime:0.104,localTime:0.631,remoteTime:1546.48,throttleTime:0.019,responseQueueTime:0.046,sendTime:0.15,securityProtocol:PLAINTEXT,principal:User:ANONYMOUS,listener:PLAINTEXT (kafka.request.logger)
remoteTime 是 1.5 秒
所以这里的问题是我应该在哪里寻找代理方来解决问题?
【问题讨论】:
-
这是什么版本的Kafka?听起来像一个错误。可能 Kafka 在向同一主题分区的消费者发送消息时并不关心公平性。增加经纪人的数量也是一种选择吗?
-
Kafka 版本为 1.0.0。是的,我曾考虑过添加一对经纪人。但在我看来,经纪人拥有免费资源,因为当新消费者添加时,前十几个消费者并没有放慢速度。最后我要为代理服务器配置监控,可能会显示一些有趣的东西。
标签: apache-kafka