從一次 Kafka 節(jié)點(diǎn)宕機(jī)探究 Kafka 的高可用實(shí)現(xiàn)
一、Kafka宕機(jī)引發(fā)的高可用問(wèn)題
二、Kafka的多副本冗余設(shè)計(jì)


- Broker (節(jié)點(diǎn)):Kafka服務(wù)節(jié)點(diǎn),簡(jiǎn)單來(lái)說(shuō)一個(gè)Broker就是一臺(tái)Kafka服務(wù)器,一個(gè)物理節(jié)點(diǎn);
- Topic (主題):在Kafka中消息以主題為單位進(jìn)行歸類(lèi),每個(gè)主題都有一個(gè) Topic Name,生產(chǎn)者根據(jù)Topic Name將消息發(fā)送到特定的Topic,消費(fèi)者則同樣根據(jù)Topic Name從對(duì)應(yīng)的Topic進(jìn)行消費(fèi);
- Partition (分區(qū)):Topic(主題)是消息歸類(lèi)的一個(gè)單位,但每一個(gè)主題還能再細(xì)分為一個(gè)或多個(gè) Partition(分區(qū)),一個(gè)分區(qū)只能屬于一個(gè)主題。主題和分區(qū)都是邏輯上的概念,舉個(gè)例子,消息1和消息2都發(fā)送到主題1,它們可能進(jìn)入同一個(gè)分區(qū)也可能進(jìn)入不同的分區(qū)(所以同一個(gè)主題下的不同分區(qū)包含的消息是不同的),之后便會(huì)發(fā)送到分區(qū)對(duì)應(yīng)的Broker節(jié)點(diǎn)上;
- Offset (偏移量):分區(qū)可以看作是一個(gè)只進(jìn)不出的隊(duì)列(Kafka只保證一個(gè)分區(qū)內(nèi)的消息是有序的),消息會(huì)往這個(gè)隊(duì)列的尾部追加,每個(gè)消息進(jìn)入分區(qū)后都會(huì)有一個(gè)偏移量,標(biāo)識(shí)該消息在該分區(qū)中的位置,消費(fèi)者要消費(fèi)該消息就是通過(guò)偏移量來(lái)識(shí)別。

你可能還有疑問(wèn),那要多少個(gè)副本才算夠用?Follower和Leader之間沒(méi)有完全同步怎么辦?一個(gè)節(jié)點(diǎn)宕機(jī)后Leader的選舉規(guī)則是什么?
-
多少個(gè)副本才算夠用?
-
Follower和Lead之間沒(méi)有完全同步怎么辦?
-
一個(gè)節(jié)點(diǎn)宕機(jī)后Leader的選舉規(guī)則是什么?
三、Ack參數(shù)決定了可靠程度
另外,這里補(bǔ)充一個(gè)面試考Kafka高可用必備知識(shí)點(diǎn):request.required.asks 參數(shù)。
Asks這個(gè)參數(shù)是生產(chǎn)者客戶(hù)端的重要配置,發(fā)送消息的時(shí)候就可設(shè)置這個(gè)參數(shù)。該參數(shù)有三個(gè)值可配置:0、1、All 。
第一種是設(shè)為0
第二種是設(shè)為1
第三種是設(shè)為All(或者-1)
四、解決問(wèn)題
-
需要將 __consumer_offset 刪除,注意這個(gè)Topic時(shí)Kafka內(nèi)置的Topic,無(wú)法用命令刪除,我是通過(guò)將 logs 刪了來(lái)實(shí)現(xiàn)刪除。 -
需要通過(guò)設(shè)置 offsets.topic.replication.factor 為3來(lái)將 __consumer_offset 的副本數(shù)改為3。
作者:JanusWoo
來(lái)源:https://juejin.im/post/6874957625998606344文章轉(zhuǎn)載:高效運(yùn)維
(版權(quán)歸原作者所有,侵刪)