從一次 Kafka 節點宕機探究 Kafka 的高可用實現
一、Kafka宕機引發的高可用問題
二、Kafka的多副本冗余設計
- Broker (節點):Kafka服務節點,簡單來說一個Broker就是一臺Kafka服務器,一個物理節點;
- Topic (主題):在Kafka中消息以主題為單位進行歸類,每個主題都有一個 Topic Name,生產者根據Topic Name將消息發送到特定的Topic,消費者則同樣根據Topic Name從對應的Topic進行消費;
- Partition (分區):Topic(主題)是消息歸類的一個單位,但每一個主題還能再細分為一個或多個 Partition(分區),一個分區只能屬于一個主題。主題和分區都是邏輯上的概念,舉個例子,消息1和消息2都發送到主題1,它們可能進入同一個分區也可能進入不同的分區(所以同一個主題下的不同分區包含的消息是不同的),之后便會發送到分區對應的Broker節點上;
- Offset (偏移量):分區可以看作是一個只進不出的隊列(Kafka只保證一個分區內的消息是有序的),消息會往這個隊列的尾部追加,每個消息進入分區后都會有一個偏移量,標識該消息在該分區中的位置,消費者要消費該消息就是通過偏移量來識別。
你可能還有疑問,那要多少個副本才算夠用?Follower和Leader之間沒有完全同步怎么辦?一個節點宕機后Leader的選舉規則是什么?
-
多少個副本才算夠用?
-
Follower和Lead之間沒有完全同步怎么辦?
-
一個節點宕機后Leader的選舉規則是什么?
三、Ack參數決定了可靠程度
另外,這里補充一個面試考Kafka高可用必備知識點:request.required.asks 參數。
Asks這個參數是生產者客戶端的重要配置,發送消息的時候就可設置這個參數。該參數有三個值可配置:0、1、All 。
第一種是設為0
第二種是設為1
第三種是設為All(或者-1)
四、解決問題
-
需要將 __consumer_offset 刪除,注意這個Topic時Kafka內置的Topic,無法用命令刪除,我是通過將 logs 刪了來實現刪除。 -
需要通過設置 offsets.topic.replication.factor 為3來將 __consumer_offset 的副本數改為3。
作者:JanusWoo
來源:https://juejin.im/post/6874957625998606344文章轉載:高效運維
(版權歸原作者所有,侵刪)