Zookeeper 在 Kafka 中的作用

leader 選舉 和 follower 信息同步

如上圖所示李破,kafaka集群的 broker宠哄,和 Consumer 都需要連接 Zookeeper。
Producer 直接連接 Broker嗤攻。

Producer 把數(shù)據(jù)上傳到 Broker毛嫉,Producer可以指定數(shù)據(jù)有幾個(gè)分區(qū)、幾個(gè)備份妇菱。上面的圖中承粤,數(shù)據(jù)有兩個(gè)分區(qū) 0暴区、1,每個(gè)分區(qū)都有自己的副本:0'辛臊、 1'仙粱。

黃色的分區(qū)為 leader,白色的為 follower浪讳。

leader 處理 partition 的所有讀寫請(qǐng)求缰盏,與此同時(shí),follower會(huì)被動(dòng)定期地去復(fù)制leader上的數(shù)據(jù)淹遵。 如下圖所示口猜,紅色的為 leader,綠色的為 follower透揣,leader復(fù)制自己到其他 Broker 中:


如果leader發(fā)生故障或掛掉济炎,一個(gè)新leader被選舉并接收客戶端的消息。Kafka確保從同步副本列表中選舉一個(gè)副本為 leader辐真。
關(guān)于follower 的同步機(jī)制可參考:https://blog.csdn.net/lizhitao/article/details/51718185

Topic 分區(qū)被放在不同的 Broker 中须尚,保證 Producer 和 Consumer 錯(cuò)開訪問 Broker,避免訪問單個(gè) Broker造成過度的IO壓力侍咱,使得負(fù)載均衡耐床。

Zookeeper 在 Kafka 中的作用

1、Broker注冊(cè)

Broker是分布式部署并且相互之間相互獨(dú)立楔脯,但是需要有一個(gè)注冊(cè)系統(tǒng)能夠?qū)⒄麄€(gè)集群中的Broker管理起來撩轰,此時(shí)就使用到了Zookeeper。在Zookeeper上會(huì)有一個(gè)專門用來進(jìn)行Broker服務(wù)器列表記錄的節(jié)點(diǎn):

/brokers/ids

每個(gè)Broker在啟動(dòng)時(shí)昧廷,都會(huì)到Zookeeper上進(jìn)行注冊(cè)堪嫂,即到/brokers/ids下創(chuàng)建屬于自己的節(jié)點(diǎn),如/brokers/ids/[0...N]木柬。

Kafka使用了全局唯一的數(shù)字來指代每個(gè)Broker服務(wù)器皆串,不同的Broker必須使用不同的Broker ID進(jìn)行注冊(cè),創(chuàng)建完節(jié)點(diǎn)后眉枕,每個(gè)Broker就會(huì)將自己的IP地址和端口信息記錄到該節(jié)點(diǎn)中去恶复。其中,Broker創(chuàng)建的節(jié)點(diǎn)類型是臨時(shí)節(jié)點(diǎn)速挑,一旦Broker宕機(jī)谤牡,則對(duì)應(yīng)的臨時(shí)節(jié)點(diǎn)也會(huì)被自動(dòng)刪除。

2梗摇、Topic注冊(cè)

在Kafka中拓哟,同一個(gè)Topic的消息會(huì)被分成多個(gè)分區(qū)并將其分布在多個(gè)Broker上想许,這些分區(qū)信息及與Broker的對(duì)應(yīng)關(guān)系也都是由Zookeeper在維護(hù)伶授,由專門的節(jié)點(diǎn)來記錄断序,如:

/borkers/topics

Kafka中每個(gè)Topic都會(huì)以/brokers/topics/[topic]的形式被記錄,如/brokers/topics/login和/brokers/topics/search等糜烹。Broker服務(wù)器啟動(dòng)后违诗,會(huì)到對(duì)應(yīng)Topic節(jié)點(diǎn)(/brokers/topics)上注冊(cè)自己的Broker ID并寫入針對(duì)該Topic的分區(qū)總數(shù),如/brokers/topics/login/3->2疮蹦,這個(gè)節(jié)點(diǎn)表示Broker ID為3的一個(gè)Broker服務(wù)器诸迟,對(duì)于"login"這個(gè)Topic的消息,提供了2個(gè)分區(qū)進(jìn)行消息存儲(chǔ)愕乎,同樣阵苇,這個(gè)分區(qū)節(jié)點(diǎn)也是臨時(shí)節(jié)點(diǎn)。

3感论、生產(chǎn)者負(fù)載均衡

由于同一個(gè)Topic消息會(huì)被分區(qū)并將其分布在多個(gè)Broker上绅项,因此,生產(chǎn)者需要將消息合理地發(fā)送到這些分布式的Broker上比肄,那么如何實(shí)現(xiàn)生產(chǎn)者的負(fù)載均衡快耿,Kafka支持傳統(tǒng)的四層負(fù)載均衡,也支持Zookeeper方式實(shí)現(xiàn)負(fù)載均衡芳绩。

(1) 四層負(fù)載均衡掀亥,根據(jù)生產(chǎn)者的IP地址和端口來為其確定一個(gè)相關(guān)聯(lián)的Broker。通常妥色,一個(gè)生產(chǎn)者只會(huì)對(duì)應(yīng)單個(gè)Broker搪花,然后該生產(chǎn)者產(chǎn)生的消息都發(fā)往該Broker。這種方式邏輯簡(jiǎn)單垛膝,每個(gè)生產(chǎn)者不需要同其他系統(tǒng)建立額外的TCP連接鳍侣,只需要和Broker維護(hù)單個(gè)TCP連接即可。但是吼拥,其無法做到真正的負(fù)載均衡倚聚,因?yàn)閷?shí)際系統(tǒng)中的每個(gè)生產(chǎn)者產(chǎn)生的消息量及每個(gè)Broker的消息存儲(chǔ)量都是不一樣的,如果有些生產(chǎn)者產(chǎn)生的消息遠(yuǎn)多于其他生產(chǎn)者的話凿可,那么會(huì)導(dǎo)致不同的Broker接收到的消息總數(shù)差異巨大惑折,同時(shí),生產(chǎn)者也無法實(shí)時(shí)感知到Broker的新增和刪除枯跑。

(2) 使用Zookeeper進(jìn)行負(fù)載均衡惨驶,由于每個(gè)Broker啟動(dòng)時(shí),都會(huì)完成Broker注冊(cè)過程敛助,生產(chǎn)者會(huì)通過該節(jié)點(diǎn)的變化來動(dòng)態(tài)地感知到Broker服務(wù)器列表的變更粗卜,這樣就可以實(shí)現(xiàn)動(dòng)態(tài)的負(fù)載均衡機(jī)制。

4纳击、消費(fèi)者負(fù)載均衡

與生產(chǎn)者類似续扔,Kafka中的消費(fèi)者同樣需要進(jìn)行負(fù)載均衡來實(shí)現(xiàn)多個(gè)消費(fèi)者合理地從對(duì)應(yīng)的Broker服務(wù)器上接收消息攻臀,每個(gè)消費(fèi)者分組包含若干消費(fèi)者,每條消息都只會(huì)發(fā)送給分組中的一個(gè)消費(fèi)者纱昧,不同的消費(fèi)者分組消費(fèi)自己特定的Topic下面的消息刨啸,互不干擾。

5识脆、分區(qū) 與 消費(fèi)者 的關(guān)系

消費(fèi)組 (Consumer Group):
consumer group 下有多個(gè) Consumer(消費(fèi)者)设联。
對(duì)于每個(gè)消費(fèi)者組 (Consumer Group),Kafka都會(huì)為其分配一個(gè)全局唯一的Group ID灼捂,Group 內(nèi)部的所有消費(fèi)者共享該 ID离例。訂閱的topic下的每個(gè)分區(qū)只能分配給某個(gè) group 下的一個(gè)consumer(當(dāng)然該分區(qū)還可以被分配給其他group)。
同時(shí)悉稠,Kafka為每個(gè)消費(fèi)者分配一個(gè)Consumer ID粘招,通常采用"Hostname:UUID"形式表示。

在Kafka中偎球,規(guī)定了每個(gè)消息分區(qū) 只能被同組的一個(gè)消費(fèi)者進(jìn)行消費(fèi)洒扎,因此,需要在 Zookeeper 上記錄 消息分區(qū) 與 Consumer 之間的關(guān)系衰絮,每個(gè)消費(fèi)者一旦確定了對(duì)一個(gè)消息分區(qū)的消費(fèi)權(quán)力袍冷,需要將其Consumer ID 寫入到 Zookeeper 對(duì)應(yīng)消息分區(qū)的臨時(shí)節(jié)點(diǎn)上,例如:

/consumers/[group_id]/owners/[topic]/[broker_id-partition_id]

其中猫牡,[broker_id-partition_id]就是一個(gè) 消息分區(qū) 的標(biāo)識(shí)胡诗,節(jié)點(diǎn)內(nèi)容就是該 消息分區(qū) 上 消費(fèi)者的Consumer ID。

6淌友、消息 消費(fèi)進(jìn)度Offset 記錄

在消費(fèi)者對(duì)指定消息分區(qū)進(jìn)行消息消費(fèi)的過程中煌恢,需要定時(shí)地將分區(qū)消息的消費(fèi)進(jìn)度Offset記錄到Zookeeper上,以便在該消費(fèi)者進(jìn)行重啟或者其他消費(fèi)者重新接管該消息分區(qū)的消息消費(fèi)后震庭,能夠從之前的進(jìn)度開始繼續(xù)進(jìn)行消息消費(fèi)瑰抵。Offset在Zookeeper中由一個(gè)專門節(jié)點(diǎn)進(jìn)行記錄,其節(jié)點(diǎn)路徑為:

/consumers/[group_id]/offsets/[topic]/[broker_id-partition_id]

節(jié)點(diǎn)內(nèi)容就是Offset的值器联。

7二汛、消費(fèi)者注冊(cè)

消費(fèi)者服務(wù)器在初始化啟動(dòng)時(shí)加入消費(fèi)者分組的步驟如下

注冊(cè)到消費(fèi)者分組。每個(gè)消費(fèi)者服務(wù)器啟動(dòng)時(shí)拨拓,都會(huì)到Zookeeper的指定節(jié)點(diǎn)下創(chuàng)建一個(gè)屬于自己的消費(fèi)者節(jié)點(diǎn)肴颊,例如/consumers/[group_id]/ids/[consumer_id],完成節(jié)點(diǎn)創(chuàng)建后渣磷,消費(fèi)者就會(huì)將自己訂閱的Topic信息寫入該臨時(shí)節(jié)點(diǎn)婿着。

對(duì) 消費(fèi)者分組 中的 消費(fèi)者 的變化注冊(cè)監(jiān)聽。每個(gè) 消費(fèi)者 都需要關(guān)注所屬 消費(fèi)者分組 中其他消費(fèi)者服務(wù)器的變化情況,即對(duì)/consumers/[group_id]/ids節(jié)點(diǎn)注冊(cè)子節(jié)點(diǎn)變化的Watcher監(jiān)聽竟宋,一旦發(fā)現(xiàn)消費(fèi)者新增或減少奥务,就觸發(fā)消費(fèi)者的負(fù)載均衡。

對(duì)Broker服務(wù)器變化注冊(cè)監(jiān)聽袜硫。消費(fèi)者需要對(duì)/broker/ids/[0-N]中的節(jié)點(diǎn)進(jìn)行監(jiān)聽,如果發(fā)現(xiàn)Broker服務(wù)器列表發(fā)生變化挡篓,那么就根據(jù)具體情況來決定是否需要進(jìn)行消費(fèi)者負(fù)載均衡婉陷。

進(jìn)行消費(fèi)者負(fù)載均衡。為了讓同一個(gè)Topic下不同分區(qū)的消息盡量均衡地被多個(gè) 消費(fèi)者 消費(fèi)而進(jìn)行 消費(fèi)者 與 消息 分區(qū)分配的過程官研,通常秽澳,對(duì)于一個(gè)消費(fèi)者分組,如果組內(nèi)的消費(fèi)者服務(wù)器發(fā)生變更或Broker服務(wù)器發(fā)生變更戏羽,會(huì)發(fā)出消費(fèi)者負(fù)載均衡担神。

以下是kafka在zookeep中的詳細(xì)存儲(chǔ)結(jié)構(gòu)圖:


補(bǔ)充

早期版本的 kafka 用 zk 做 meta 信息存儲(chǔ),consumer 的消費(fèi)狀態(tài)始花,group 的管理以及 offse t的值妄讯。考慮到zk本身的一些因素以及整個(gè)架構(gòu)較大概率存在單點(diǎn)問題酷宵,新版本中確實(shí)逐漸弱化了zookeeper的作用亥贸。新的consumer使用了kafka內(nèi)部的group coordination協(xié)議,也減少了對(duì)zookeeper的依賴

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浇垦,一起剝皮案震驚了整個(gè)濱河市炕置,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌男韧,老刑警劉巖朴摊,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異此虑,居然都是意外死亡甚纲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門朦前,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贩疙,“玉大人,你說我怎么就攤上這事况既≌饨Γ” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵棒仍,是天一觀的道長悲靴。 經(jīng)常有香客問我,道長莫其,這世上最難降的妖魔是什么癞尚? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任耸三,我火速辦了婚禮,結(jié)果婚禮上浇揩,老公的妹妹穿的比我還像新娘仪壮。我一直安慰自己,他們只是感情好胳徽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布积锅。 她就那樣靜靜地躺著,像睡著了一般养盗。 火紅的嫁衣襯著肌膚如雪缚陷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天往核,我揣著相機(jī)與錄音箫爷,去河邊找鬼。 笑死聂儒,一個(gè)胖子當(dāng)著我的面吹牛虎锚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衩婚,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼翁都,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了谅猾?” 一聲冷哼從身側(cè)響起柄慰,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎税娜,沒想到半個(gè)月后坐搔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡概行,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年弧岳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凳忙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽炬。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涧卵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腹尖,到底是詐尸還是另有隱情柳恐,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布讼庇,位于F島的核電站,受9級(jí)特大地震影響近尚,放射性物質(zhì)發(fā)生泄漏蠕啄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一戈锻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舶沛,春花似錦窗价、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帝牡。三九已至,卻和暖如春靶溜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背罩息。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓷炮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓苍狰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淋昭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 姓名:周小蓬 16019110037 轉(zhuǎn)載自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw閱讀 34,721評(píng)論 13 425
  • Kafka入門經(jīng)典教程-Kafka-about云開發(fā) http://www.aboutyun.com/threa...
    葡萄喃喃囈語閱讀 10,827評(píng)論 4 54
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)呀打,斷路器矢赁,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 一贬丛、入門1、簡(jiǎn)介Kafka is a distributed,partitioned,replicated com...
    HxLiang閱讀 3,348評(píng)論 0 9
  • By/十年欣 館內(nèi)除了那位叫常志強(qiáng)老人所講的遭遇豺憔,還有一位叫李秀英的老人,鏡頭中她在回憶當(dāng)年的一點(diǎn)一滴恭应。 李秀英當(dāng)...
    常今夏閱讀 195評(píng)論 0 0