自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

談?wù)勀銓?duì)Kafka副本Leader選舉原理的理解?

開發(fā) 架構(gòu)
確實(shí)Kafka早期的版本就是直接用Zookeeper來完成選舉的。利用了Zookeeper的Watch機(jī)制;節(jié)點(diǎn)不允許重復(fù)寫入以及臨時(shí)節(jié)點(diǎn)這些特性。這樣實(shí)現(xiàn)比較簡單,省事。但是也會(huì)存在一定的弊端。比如分區(qū)和副本數(shù)量過多,所有的副本都直接參與選舉的話,一旦某個(gè)出現(xiàn)節(jié)點(diǎn)的增減,就會(huì)造成大量的Watch事件被觸發(fā),ZooKeeper的就會(huì)負(fù)載過重,不堪重負(fù)。

一位7年工作經(jīng)驗(yàn)的小伙伴,面試被問到這樣一道題,說:”談?wù)勀銓?duì)Kafka副本Leader選舉原理的理解“。當(dāng)時(shí),他想,這Kafka用的不就是Zookeeper 的選舉嗎?難道Kafka又自己搞了一套。沒錯(cuò),這回Kafka自己造了一個(gè)輪子。

那么今天,我給大家來聊一聊我對(duì)Kafka副本Leader選舉原理的理解。

1、選舉原理

確實(shí)Kafka早期的版本就是直接用Zookeeper來完成選舉的。利用了Zookeeper的Watch機(jī)制;節(jié)點(diǎn)不允許重復(fù)寫入以及臨時(shí)節(jié)點(diǎn)這些特性。這樣實(shí)現(xiàn)比較簡單,省事。但是也會(huì)存在一定的弊端。比如分區(qū)和副本數(shù)量過多,所有的副本都直接參與選舉的話,一旦某個(gè)出現(xiàn)節(jié)點(diǎn)的增減,就會(huì)造成大量的Watch事件被觸發(fā),ZooKeeper的就會(huì)負(fù)載過重,不堪重負(fù)。

新版本的Kafka中換了一種實(shí)現(xiàn)方式。不是所有的Repalica都參與Leader選舉,而是由其中的一個(gè)Broker統(tǒng)一來指揮,這個(gè)Broker的角色就叫做Controller控制器。

Kafka要先從所有Broker中選出唯一的一個(gè)Controller。

所有的Broker會(huì)嘗試在Zookeeper中創(chuàng)建臨時(shí)節(jié)點(diǎn)/controller,誰先創(chuàng)建成功,誰就是Controller。那如果Controller掛掉或者網(wǎng)絡(luò)出現(xiàn)問題,ZooKeeper上的臨時(shí)節(jié)點(diǎn)就會(huì)消失。其他的Broker通過Watch監(jiān)聽到Controller下線的消息后,繼續(xù)按照先到先得的原則競選Controller。這個(gè)Controller就相當(dāng)于選舉委員會(huì)的主席。

當(dāng)一個(gè)節(jié)點(diǎn)成為Controller之后,他就會(huì)承擔(dān)以下職責(zé):

監(jiān)聽Broker變化、監(jiān)聽Topic變化、監(jiān)聽Partition變化、獲取和管理Broker、Topic、Partition的信息、管理Partiontion的主從信息。

2、選舉規(guī)則

Controller確定以后,就可以開始做分區(qū)選主的事情。接下來就是找候選人。顯然,每個(gè)Replica都想推薦自己,但不是所有的Replica都有競選資格。只有在ISR(In-Sync Replicas)保持心跳同步的副本才有資格參與競選。就好比是皇帝每天著急皇子們開早會(huì),只有每天來打卡的皇子才能加入ISR。那些請(qǐng)假的、遲到的沒有資格參與選舉。

接下來,就是Leader選舉,就相當(dāng)于要在眾多皇子中選出太子。在分布式選舉中,有非常多的選舉協(xié)議比如ZAB、Raft等等,他們的思想歸納起來都是:先到先得,少數(shù)服從多數(shù)。但是Kafka沒有用這些方法,而是用了一種自己實(shí)現(xiàn)的算法。

提到Kafka官方的解釋是,它的選舉算法和微軟的PacificA算法最相近。大致意思就是,默認(rèn)是讓ISR中第一個(gè)Replica變成Leader。比如ISR是1、5、9,優(yōu)先讓1成為Leader。這個(gè)跟中國古代皇帝傳位是一樣的,優(yōu)先傳給皇長子。

假設(shè),我們創(chuàng)建一個(gè)4個(gè)分區(qū)2個(gè)副本的Topic,它的Leader分布是這樣的,如圖所示:

第1個(gè)分區(qū)的副本Leader,落在B節(jié)點(diǎn)上。第2個(gè)分區(qū)的副本Leader落在C節(jié)點(diǎn)上,第3個(gè)分區(qū)的副本Leader落在A節(jié)點(diǎn)上,第4個(gè)分區(qū)的副本Leader落在B節(jié)點(diǎn)上。如果有更多副本,就以此類推。我們發(fā)現(xiàn)Leader的選舉的規(guī)則相當(dāng)于蛇形走位。

這樣設(shè)計(jì)的好處是可以提高數(shù)據(jù)副本的容災(zāi)能力。將Leader和副本完全錯(cuò)開,從而不至于一掛全掛。

以上就是我對(duì)Kafka副本Leader選舉原理的理解!

責(zé)任編輯:武曉燕 來源: Tom彈架構(gòu)
相關(guān)推薦

2022-08-14 07:14:50

Kafka零拷貝

2022-07-28 19:19:21

Zookeeper中心化架構(gòu)

2022-06-30 09:10:33

NoSQLHBaseRedis

2023-11-28 12:25:02

多線程安全

2022-09-06 11:13:16

接口PipelineHandler

2022-08-26 00:02:03

RocketMQ單體架構(gòu)MQ

2022-08-29 16:03:33

狀態(tài)流轉(zhuǎn)Java

2024-09-02 16:10:19

vue2前端

2024-09-20 05:46:00

2024-09-11 16:49:55

2022-09-19 07:57:59

云服務(wù)互聯(lián)網(wǎng)基礎(chǔ)設(shè)施

2022-10-09 15:18:31

SwaggerOpenAPI工具

2022-09-09 10:15:06

OAuthJava

2025-03-07 00:11:00

JWTJSONSession

2024-12-06 14:34:00

Spring過濾器

2025-02-21 15:25:54

虛擬線程輕量級(jí)

2024-09-27 15:43:52

零拷貝DMAIO

2018-08-20 08:30:05

Kafka架構(gòu)系統(tǒng)

2025-03-21 00:00:05

Reactor設(shè)計(jì)模式I/O 機(jī)制

2024-10-24 16:14:43

數(shù)據(jù)傳輸CPU零拷貝
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)