Kafka總結——KafkaProducer

    我司使用kafka版本爲1.1.0,主要有兩個使用場景:其一,消息通信;其二,與spark streaming集成使用。本文用來記錄筆者對kafka producer的使用、理解。

Producer主要工作過程

1、 將消息包裝成ProducerRecord對象
2、 對ProducerRecord對象進行序列化
3、 Interceptor(該步驟暫時沒有使用場景)
4、 通過partitioner,選擇producerrecord發往的分區
5、 準備發往kafka broker
6、 等待broker的響應

Producer主要參數

配置項 說明
Buffer.memory 默認32m
Buffer.size 默認16k
Linger.ms 默認0
Acks 默認值1
Compression.type 默認值none
Max.request.size 默認1M
Max.block.ms 默認60s
  1. Buffer.memory,用來指定Kafka Producer實例使用的緩存空間大小。
  2. Buffer.size和linger.ms,這兩個參數決定何時真正把message發送到kafka broker。當內存中存在的message條數超過buffer.size,或者延遲了linger.ms,便會將緩衝空間中的消息發出去。
  3. Acks,消息發出去,broker何時會返回一個發送成功的響應。默認值爲1,即只需要該topic partition 的leader收到該消息,並持久化成功即可。我司一般都使用該默認值。
  4. Compression.type,對消息進行壓縮,可以減少網絡傳輸消耗,但是會增加cpu的消耗。另外如何此處設置的compression.type和broker server.properties中配置的壓縮方式不一樣,那broker會先進行解壓縮,再用server端配置的壓縮方式再次壓縮。
  5. Max.request.size,限制單條消息的最大值
  6. Max.block.ms,當buffer.memory已滿(即producer往緩存發送的速度已經遠大於往broker發送線程的速度),會讓發送線程阻塞一段時間,該時間就由此參數決定,默認60s。

其它

    平時使用時,Message內容全部放在value部分,key爲null,so,producer使用輪詢方式去發送消息。
    雖然Kafka producer是線程安全的;但在多線程情況下,我還是採用一個線程一個Producer的方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章