单一Kafka主题的多个消费者React缓慢

vi4fp9gy  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(370)

我有Kafka集群在3台服务器上。有一个主题包含一个分区和3个副本。平均消息约为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秒后就会捕捉到这种状态。第一组读取了419万条记录,第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 console consumer和librdkafka中是可以重现的,所以我认为代理有问题。
我在broker configs中将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)

远程时间为1.5秒
所以这里的问题是,我应该从经纪人的Angular 去解决问题?

kuarbcqp

kuarbcqp1#

问题是使用者占用了代理服务器上所有可用的网络。
Kafka可能会以某种确定的顺序向消费者发送响应(据我所知,按连接时间)。所以我们有一些非常快速的消费者,和一堆速度合理的消费者。其他消费者是缓慢的,只有断开“快速”消费者的连接才能帮助他们。

相关问题