簡體   English   中英

如何設置Kafka Producer的每秒消息速率?

[英]How to set Kafka Producer message rate per second?

我正在讀取一個csv文件,並將此輸入的行提供給我的Kafka Producer。 現在,我希望我的Kafka Producer以每秒100條消息的速度產生消息。

如果您喜歡流處理,那么akka-streams會很好地支持節流: http ://doc.akka.io/docs/akka/current/java/stream/stream-quickstart.html#time-based-processing

然后,akka-stream-kafka(又名反應性-kafka)庫允許您將兩者連接在一起: http : //doc.akka.io/docs/akka-stream-kafka/current/home.html

看一下Kafka Producer的linger.msbatch.size屬性。 您必須相應地調整這些屬性以獲得所需的速率。

生產者將在請求傳輸之間到達的所有記錄歸為一個批處理的請求。 通常,只有在記錄到達的速度快於記錄發送的速度時,這種情況才會發生。 但是,在某些情況下,即使在中等負載下,客戶端也可能希望減少請求的數量。 此設置通過添加少量的人為延遲來實現此目的-也就是說,與其立即發送記錄,生產者將等待直到給定的延遲,才允許發送其他記錄,以便可以將發送分批在一起。 可以認為這類似於TCP中的Nagle算法。 此設置給出了批處理延遲的上限:一旦獲得分區的記錄的batch.size值,無論此設置如何,都會立即發送該記錄,但是,如果我們為該分區積累的字節數少於這個數量,我們將“持續指定的時間,以等待更多記錄顯示。 此設置默認為0(即無延遲)。 例如,設置linger.ms = 5將具有減少發送請求的數量的效果,但在沒有負載的情況下,發送記錄的延遲將增加5ms。

在Kafka JVM Producer中,吞吐量取決於多個因素。 最常見的是,它以MB /秒而不是Msg /秒為單位。 在您的示例中,如果假設CSV中的每一行大小均為1MB,則您需要調整生產者配置以達到100MB /秒,以便可以實現100 Msg /秒的目標吞吐量。 在調整生產者配置時,必須考慮什么是您的batch.size (以字節為單位)的配置值? 如果將其設置得太低,則生產者將嘗試更頻繁地發送消息並等待服務器的答復。 這將提高生產者的產量。 但是會影響延遲。 如果您使用的是基於異步回調的生產者,那么在這種情況下,您的總體吞吐量將受到生產者在等待來自max.in.flight.request.per.connection服務器的答復之前可以發送多少消息的max.in.flight.request.per.connection 如果將batch.size得過高,則生產者吞吐量會受到影響,因為在等待linger.ms周期后,kafka生產者會將批次中的所有消息立即發送給該特定分區的代理。 但是具有更大的batch.size意味着更大的buffer.memory可能會對GC造成壓力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM