我的 Kafka 消費者的輪詢速度比我預期的要快。是否有一些配置我可以更改以使其一直等待fetch.max.wait.ms?我將 fetch.max.wait.ms 設置為某個秒數 (5)。我設置fetch.min.bytes了一些大字節數 (99,988,800)。我閱讀了文檔(但可能遺漏了一些內容):https://kafka.apache.org/documentation/獲取.min.bytes服務器應為獲取請求返回的最小數據量。如果可用數據不足,則請求將等待積累足夠多的數據,然后再回答請求。1 字節的默認設置意味著一旦單個字節的數據可用或獲取請求在等待數據到達時超時,就會立即響應獲取請求。將其設置為大于 1 的值將導致服務器等待大量數據的積累,這可以稍微提高服務器吞吐量,但會增加一些額外的延遲。fetch.max.wait.ms如果沒有足夠的數據立即滿足 fetch.min.bytes 給定的要求,服務器在回答獲取請求之前將阻塞的最長時間。fetch.max.wait.ms=5000,
fetch.min.bytes=99988800根據我的配置選項和數據集,我希望調用poll在返回任何記錄之前始終阻塞 5 秒。相反,對 的調用poll有時會在不到一秒的時間內解決,并且總是有一些少量的記錄。這是示例運行的輸出:// send 100 records// doesn't matter how// timestamp -> records received// (date, hour and minute are not shown, just the relevant seconds.millis)32.475 -> 1033.392 -> 1234.116 -> 1637.477 -> 1638.395 -> 1839.118 -> 1742.479 -> 743.397 -> 4沒有延遲真的接近5s。
2 回答

滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
對于財產,fetch.max.wait.ms=5000
您說:“即使沒有足夠的數據可供選擇,也不要等待超過 5 秒”。在執行輪詢之前,您沒有指定最小秒數。您可以通過啟動 2 個 kafka 消費者來測試此行為,其中一個是您設置的fetch.max.wait.ms=20000
,另一個是保留默認值。您會看到,在具有默認設置的消費者中,您幾乎會立即收到消息,而在消費者中,fetch.max.wait.ms=20000
您將不得不稍等片刻。我在我的機器上嘗試過設置fetch.max.wait.ms=20000
,有時需要 15 秒才能接收記錄,有時需要 10 秒等等,但不會超過 20 秒。

慕沐林林
TA貢獻2016條經驗 獲得超9個贊
您還需要調整 max.partition.fetch.bytes、message.max.bytes 和 max.message.bytes。如果每條記錄的大小約為100KB,則10條記錄將觸發發送。這可能是你在你的案例中看到的。
添加回答
舉報
0/150
提交
取消