天天看點

kafka生産者執行個體配置參數

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