KafkaProducer中有三個參數是必填的:
bootstrap.servers
: 指定生產者客戶端連接kafka集羣所需的broker地址列表,格式爲host1:port1,host2:port2,可以設置一個或多個。這裏並非需要所有的broker地址,因爲生產者會從給定的broker裏尋找其它的broker。
key.serializer和value.serializer
:broker接收消息必須以字節數組byte[]形式存在,KafkaProducer<K,V>和ProducerRecord<K,V>中的泛型就是key和value的類型。key.serializer和value.serializer分別用來指定key和value序列化操作的序列化器,無默認值。類的全限定名。
非必填參數
client.id
:這個參數用來設定kafkaProducer對應的客戶端id,默認值爲“”,如果不設置,會自動生成一個非空字符串,內容形式如:“producer-1”,“producer-2”…
retries
:配置生產者重試次數,對於可重試異常,那麼只要在規定的次數內自行恢復了,就不會拋出異常,默認是0。
retry.backoff.ms
用來設定兩次重試之間的時間間隔,默認值100。
partitioner.class
:顯示配置使用哪個分區器。
interceptor.classes
:指定自定義攔截器,多個傳List集合。
buffer.memory
:生產者客戶端RecordAccumulator緩存大小,默認值爲33554432B,即32M。
batch.size
:ProducerBatch可以複用內存區域的大小
max.block.ms
:最大阻塞時間,RecordAccumulator緩存不足時或者沒有可用的元數據時,KafkaProducer的send()方法調用要麼被阻塞,要麼拋出異常,此參數的默認值爲60000,即60s。
metadata.max.age.ms
:當客戶端超過這個時間間隔時就會更新元數據信息默認值300000,即5分鐘。元數據指集羣中有哪些主題,主題有哪些分區,每個分區leader副本在哪個節點上,follower副本在哪個節點上,哪些副本在AR,ISR等集合中,集羣中有哪些節點等等。
acks
:用來指定必須要多少個副本收到這條消息,之後生產者纔會認爲這條消息成功寫入。acks是生產者客戶端中一個非常重要的參數,它涉及消息的可靠性和吞吐量之間的權衡。acks參數有三種類型的值:字符串類型,不是整型。
1:只要分區的leader副本寫入成功,生產者就會收到來自服務端的成功響應。如果再被其它follower副本拉取前leader副本崩潰,那麼此時消息還是會丟失。
0:生產者發送消息之後不需要等待任何服務端的響應。如果在消息發送到寫入kafka的過程中出現了某些異常,導致kafka並沒有收到這條消息,那麼生產者也無從得知,消息會丟失。
-1或者all:生產者發送消息之後,需要等待ISR中所有副本成功寫入消息之後才能收到來自服務端的成功響應。
max.request.size
:用來限制生產者客戶端能發送的消息的最大值,默認值爲1048576B,即1MB。這個參數涉及到其它參數的聯動,比如broker端的message.max.bytes參數。對kafka沒有足夠把控的時候不要更改此參數。
compression.type
:指定消息的壓縮方式,默認值爲"none",可以配置爲"gzip",“snappy”和“lz4”。
connections.max.idle.ms
:用來指定多久之後關閉閒置的連接,默認值540000(ms),即9min
linger.ms
:生產者發送ProducerBatch之前等待更多消息(ProducerRecoder)加入ProducerBatch的時間,默認值爲0。生產者客戶端會在ProducerBatch被填滿或者等待時間超過linger.ms時發送出去。增大這個參數的值會增加消息的延遲,但同時會提高吞吐量。
receive.buffer.bytes
:用來設置socket接收緩衝區的大小,默認值爲32768(B),即32KB,如果設置爲-1,則使用操作系統的默認值。
send.buffer.bytes
:用來設置socket發送緩衝區的大小,默認值爲131072(B),即128KB,如果設置爲-1,則使用操作系統默認值。
request.timeout.ms
:配置Producer等待請求響應的最長時間,默認值爲30000(ms),請求超時之後可以進行重試。注意這個參數需要比broker端參數replica.lag.time.max.ms的值要大,這樣可以減少因客戶端重試而引起的消息重複的概率。
enable.idempotence
:是否開啓冪等性功能,默認值false
max.in.flight.requests.per.connection
:限制每個連接,也就是客戶端與Node之間的連接最多緩存請求數,默認值5
transactional.id
:設置事物id,必須唯一,默認值null
實時內容請關注微信公衆號,公衆號與博客同時更新:程序員星星