Kafka生產者配置是確保消息可靠、高效傳輸的關鍵。以下是一些主要的配置要點:
必選配置項
- bootstrap.servers:指定broker的地址清單,以host:port形式。建議至少指定兩個broker,以便一個宕機時仍可連接。
- key.serializer 和 value.serializer:指定發送消息的key和value的序列化類型。必須寫全類名。
關鍵基礎配置的含義
- acks:指定有多少個分區副本收到消息,生產者才認為消息發送成功。對消息丟失的可能性有重要影響。
acks=0
:生產者發送消息后,不會等待broker的響應,可能導致消息丟失。
acks=1
:只要broker集群的首領節點收到消息,生產者就會收到成功響應,可能存在消息丟失風險。
acks=all
:只有當所有參與分區復制的節點都收到消息時,生產者才會收到成功響應,最安全但延遲最高。
- buffer.memory:配置生產者內存緩沖區的大小,用于緩沖要發送到broker的消息。
- compression.type:指定消息壓縮方式,如snappy、gzip等,可以降低網絡傳輸開銷和存儲開銷。
- retries:生產者從broker收到可重試的錯誤時的重試次數。
- batch.size:發送到同一個主題、同一個分區的消息,生產者會將其放到同一個批次中,此參數指定了一個批次可以使用的內存大小。
- max.in.flight.requests.per.connection:此參數指定了生產者在收到broker響應之前可以發送多少個小希,值越高吞吐量越大但會占用越多的內存。
- max.request.size:指定了生產者發送請求的大小上限。
其他重要配置
- linger.ms:指定生產者發送ProducerBatch之前等待ProducerRecord加入ProducerBatch的時間,增大該參數會增加消息延遲,但是能提升一定的吞吐量。
- receive.buffer.bytes 和 send.buffer.bytes:設置socket接收和發送消息緩沖區的大小。
- request.timeout.ms:設置Producer等待請求響應的最長時間。
- metadata.fetch.timeout.ms:Producer在獲取元數據時等待服務器返回響應的時間。
生產者發送消息方式
- 發送并忘記:生產者把消息發送給broker,但不關注消息是否正常達到。
- 同步發送:使用send()方法發送消息,會返回一個Future對象,通過其get方法可同步等待broker的響應。
- 異步發送:使用send()方法發送消息,指定一個回調函數,broker在返回時會調用其回調函數。
以上配置要點涵蓋了Kafka生產者的核心配置,根據具體的應用場景和需求,可能還需要進行更多的調優和配置。