[英]Multiple consumers on single Kafka topic are slow
我在3台服務器上有Kafka集群。 一個主題有一個分區和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秒后捕獲了此狀態。 第1組讀取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控制台使用者和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秒
因此,這里的問題是我應該在經紀人方面尋找解決方案?
問題在於,使用者占用了代理服務器上的所有可用網絡。
Kafka可能會以某種確定的順序(根據我所知的連接時間)將響應發送給消費者。 因此我們得到了一些非常快的消費者,以及一群速度合理的消費者。 其他消費者很慢,只有斷開“快速”消費者才能為他們提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.