偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

1、選舉原理

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

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

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

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

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

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

2、選舉規(guī)則

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

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

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

假設(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ò)開(kāi),從而不至于一掛全掛。

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

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

2022-08-14 07:14:50

Kafka零拷貝

2022-07-28 19:19:21

Zookeeper中心化架構(gòu)

2023-11-28 12:25:02

多線程安全

2022-06-30 09:10:33

NoSQLHBaseRedis

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過(guò)濾器

2024-09-27 15:43:52

零拷貝DMAIO

2025-02-21 15:25:54

虛擬線程輕量級(jí)

2025-08-18 00:00:00

零拷貝系統(tǒng)調(diào)用函數(shù)

2022-03-21 09:05:18

volatileCPUJava

2025-03-21 00:00:05

Reactor設(shè)計(jì)模式I/O 機(jī)制
點(diǎn)贊
收藏

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