Kafka参数图鉴——unclean.leader.election.enable
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/kafka-params-analysis-of-unclean-leader-election-enable/
Kafka參數圖鑒——unclean.leader.election.enable
如何提高Kafka可靠性是一個可以長篇大論的主題。很多初學者會簡單的認為將客戶端參數acks設置為-1即可保證Kafka的可靠性,顯然這是很片面的觀點。就可靠性本身而言,它并不是一個可以用“是”或者“否”來衡量的一個指標,而一般是用幾個9來衡量。就參數方面而言,與Kafka可靠性相關的參數不止acks這一個,比如retries、replication.factor、min.insync.replicas、unclean.leader.election.enable等等,某些參數還要級聯配置。
本文主要闡述的是Kafka可靠性相關參數中的一個,即unclean.leader.election.enable。隨著Kafka版本的變更,有的參數消失,也有的參數被加入進來,而傳承下來的參數一般都不太會修改既定的默認值,而unclean.leader.election.enable參數卻是其中的一個反例。從Kafka 0.11.0.0版本開始unclean.leader.election.enable參數的默認值由原來的true改為false,這個參數背后到底意味著什么,Kafka的設計者處于什么原因要修改這個默認值?
參考上圖,某種狀態下,follower2副本落后leader副本很多,并且也不在leader副本和follower1副本所在的ISR(In-Sync Replicas)集合之中。follower2副本正在努力的追趕leader副本以求迅速同步,并且能夠加入到ISR中。但是很不幸的是,此時ISR中的所有副本都突然下線,情形如下圖所示:
此時follower2副本還在,就會進行新的選舉,不過在選舉之前首先要判斷unclean.leader.election.enable參數的值。如果unclean.leader.election.enable參數的值為false,那么就意味著非ISR中的副本不能夠參與選舉,此時無法進行新的選舉,此時整個分區處于不可用狀態。如果unclean.leader.election.enable參數的值為true,那么可以從非ISR集合中選舉follower副本稱為新的leader。
我們進一步考慮unclean.leader.election.enable參數為true的情況,在上面的這種情形中follower2副本就順其自然的稱為了新的leader。隨著時間的推進,新的leader副本從客戶端收到了新的消息,如上圖所示。
此時,原來的leader副本恢復,成為了新的follower副本,準備向新的leader副本同步消息,但是它發現自身的LEO比leader副本的LEO還要大。Kafka中有一個準則,follower副本的LEO是不能夠大于leader副本的,所以新的follower副本就需要截斷日志至leader副本的LEO處。
如上圖所示,新的follower副本需要刪除消息4和消息5,之后才能與新的leader副本進行同步。之后新的follower副本和新的leader副本組成了新的ISR集合,參考下圖。
原本客戶端已經成功的寫入了消息4和消息5,而在發生日志截斷之后就意味著這2條消息就丟失了,并且新的follower副本和新的leader副本之間的消息也不一致。也就是說如果unclean.leader.election.enable參數設置為true,就有可能發生數據丟失和數據不一致的情況,Kafka的可靠性就會降低;而如果unclean.leader.election.enable參數設置為false,Kafka的可用性就會降低。具體怎么選擇需要讀者更具實際的業務邏輯進行權衡,可靠性優先還是可用性優先。從Kafka 0.11.0.0版本開始將此參數從true設置為false,可以看出Kafka的設計者偏向于可靠性,如果能夠容忍uncleanLeaderElection場景帶來的消息丟失和不一致,可以將此參數設置為之前的老值——true。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/kafka-params-analysis-of-unclean-leader-election-enable/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
以上是生活随笔為你收集整理的Kafka参数图鉴——unclean.leader.election.enable的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kafka解惑之时间轮(TimingWh
- 下一篇: 直击Kafka的心脏——控制器