首页 文章

单个 Kafka 主题的多个消费者都很慢

提问于
浏览
2

我在 3 台服务器上安装了 Kafka 集群。有一个主题有一个分区和 3 个副本。平均消息大约为 200 字节。

我希望多个消费者(i.e.具有不同的组 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 读取 4.19 百万条记录,group-30 只读取 37958 条记录。

消费者的分布因运行而异,但总是存在缓慢的消费者。

我试图在专用服务器上运行消费者,并在 Kafka 集群本地运行 - 情况没有改变。

慢速消费者的日志消息显示 round-trip-time 很高,有时超过一秒

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 console consumer 和 librdkafka 重现,所以我认为经纪人有问题。

我已将代理配置中的 num.io.threads 和 num.network.threads 参数设置为 32,但它没有帮助。其他参数是默认值。

任何帮助将不胜感激。

更新 1

经纪人缓慢消费者的日志消息显示问题肯定在经纪人方面:

[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 秒

所以这里的问题是我应该在哪里寻找经纪人来解决问题?

1 回答

  • 0

    问题是消费者占用代理服务器上的所有可用网络。

    卡夫卡可能会以某种确定的顺序向消费者发送回复(据我所知,通过连接时间)。所以我们得到了一些非常快速的消费者,以及一群速度合理的消费者。其他消费者很慢,只有“快速”消费者的断开才能帮助他们。

相关问题