Kafka消息可靠性配置

Kafka發送消息是異步的,因此如果沒有設置異步回調異常處理,很容易導致消息丟失而且系統不知道的情況的。 因此我們在業務有需要的情況下,配置好消息的可靠性參數。
主要配置以下參數

max.block.ms =
acks = all or -1
retries = Integer.MAX_VALUE
max.in.flight.requests.per.connection = 1
unclean.leader.election.enable = false
default.replication.factor =3
min.insync.replicas = 2
replication.factor > min.insysnc.replicas
enable.auto.commit= false.
代碼回調機制的send方法 KafkaProducer.send(record, callback)
我們一一介紹這些參數的含義和作用。

對於producer端,

acks = all or -1
等待所有的follower都響應了發送消息才能認爲發送消息成功,這是producer端最強程度的持久化保證。

max.in.flight.requests.per.connection = 1
是爲了防止topic同分區下的消息亂序。

max.block.ms = 60000 (默認值)
如果發送端緩衝區已經滿了,Producer會阻塞多長時間。 如果Producer發送的比broker端接收快,會拋出異常。.
The configuration controls how long KafkaProducer.send() and KafkaProducer.partitionsFor() will block.These methods can be blocked either because the buffer is full or metadata unavailable.Blocking in the user-supplied serializers or partitioner will not be counted against this timeout.

對於broker端

unclean.leader.election.enable = false
關閉unclean leader選舉,即不允許非ISR中的副本被選舉爲leader,從而避免broker端因爲日誌水位截斷造成的消息丟失。

default.replication.factor =3
副本因此一般設置爲3,

min.insysnc.replicas
用於控制某條消息至少被被寫入到ISR中的多少個副本纔算成功,設置成大於1是爲了提升producer端發送語義的持久性,只有在producer端的acks被設置爲all或者-1時,這個參數才意義。

確保replication.factor > min.insysnc.replicas
若兩者相等,那麼只要有一個副本掛掉了,分區就無法正常工作,雖然有很高的持久性,但是可用性降低了。 推薦配置replication.factor = min.insysnc.replicas + 1

參考:http://kafka.apache.org/documentation.html#producerconfigs

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