日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

漫游Kafka实现篇之分布式

發(fā)布時(shí)間:2024/4/11 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫游Kafka实现篇之分布式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文地址:http://blog.csdn.net/honglei915/article/details/37932819

Zookeeper節(jié)點(diǎn)標(biāo)記

當(dāng)路徑中的元素包括在方括號(hào)里比如[xyz],則表示xyz表示的值是不固定的,每個(gè)可能的值都有一個(gè)Zookeeper節(jié)點(diǎn)。比如/topics/[topic]表示每個(gè)topic名稱對應(yīng)/topics的一個(gè)子目錄。也可以用類似[0...5]表示一個(gè)數(shù)值范圍來表示含有子目錄0,1,2,3,4的目錄。箭頭->表示znode的節(jié)點(diǎn)含有某個(gè)內(nèi)容,比如/hello->word表示一個(gè)含有“world”的節(jié)點(diǎn)。

/brokers/ids/[0...N] --> host:port (ephemeral node)

表示一個(gè)broker節(jié)點(diǎn)的列表,每個(gè)節(jié)點(diǎn)提供了一個(gè)供consumers識(shí)別的broker id,這個(gè)id必須在配置文件中指明。啟動(dòng)時(shí),broker節(jié)點(diǎn)會(huì)用紙的id在/brokers/ids下給自己注冊一個(gè)znode,broker可以被轉(zhuǎn)移到另外一臺(tái)機(jī)器上,只要id不變就不會(huì)影響consumers.如果試圖注冊一個(gè)已經(jīng)存在的broker id(比如兩個(gè)節(jié)點(diǎn)配置了同樣的id)將會(huì)產(chǎn)生錯(cuò)誤。

Broker注冊的Zookeeper節(jié)點(diǎn)是臨時(shí)節(jié)點(diǎn),如果一個(gè)broker節(jié)點(diǎn)關(guān)閉了,注冊也就失效了,并通知consumer這個(gè)節(jié)點(diǎn)不再活動(dòng)了。

Consumers和Consumer組

Consumers也在Zookeeper中注冊自己,目的是在消費(fèi)消息時(shí)進(jìn)行負(fù)載均衡,并跟蹤消費(fèi)的每個(gè)分區(qū)的offset.

Consumers可以組成一個(gè)組,共同消費(fèi)一個(gè)copic,組中的每個(gè)consumer共享一個(gè)組id.組id配置在consumer的配置參數(shù)中。可以參考前面文章的consumer實(shí)例。

組中的consumer會(huì)均勻分配topic的分區(qū),每個(gè)分區(qū)只會(huì)被組里的一個(gè)consumer消費(fèi)。

Consumer Id注冊

除了共享的組id,每個(gè)consumer還會(huì)沒分配一個(gè)臨時(shí)的唯一的consumer_id,格式為:hostname:uuid。consumer_id被注冊到以下的目錄中:

/consumers/[group_id]/ids/[consumer_id] --> {"topic1": #streams, ..., "topicN": #streams} (ephemeral node) 每個(gè)consumer都注冊到組的下面,并用consumer_id創(chuàng)建一個(gè)znode.znode的值包含一個(gè)<topic, #streams>.的map.Znode節(jié)點(diǎn)是臨時(shí)的,如果consumer線程結(jié)束了,這個(gè)節(jié)點(diǎn)就會(huì)消失。

Consumer Offset 跟蹤

Consumer跟蹤它在每個(gè)分區(qū)中消費(fèi)的最大的offset,并保存在以下的Zookeeper目錄中:

/consumers/[group_id]/offsets/[topic]/[broker_id-partition_id] --> offset_counter_value ((persistent node)

分區(qū)歸屬注冊

每個(gè)分區(qū)只會(huì)被組中的一個(gè)consumer消費(fèi),consumer在消費(fèi)之前必須建立和分配的分區(qū)的歸屬關(guān)系,把它的consumerid寫入broker分區(qū)下的一個(gè)臨時(shí)節(jié)點(diǎn)。

/consumers/[group_id]/owners/[topic]/[broker_id-partition_id] --> consumer_node_id (ephemeral node)

Broker節(jié)點(diǎn)注冊

Broker節(jié)點(diǎn)基本是獨(dú)立的,只需發(fā)布自己擁有的信息。當(dāng)一個(gè)節(jié)點(diǎn)加入,它把自己注冊到broker node目錄中,并寫入host name和port的信息到broker topic記錄中。Broker也要注冊一個(gè)topic列表,新的topic會(huì)被動(dòng)態(tài)的注冊。

Consumer注冊規(guī)則

當(dāng)一個(gè)consumer啟東時(shí),它將遵循以下步驟:

  • 把自己注冊到組下面的consumer id記錄中。
  • 注冊一個(gè)監(jiān)聽器,監(jiān)聽consumer id記錄的的“變更(新的consumer加入或老的退出)”,每次“變更”都會(huì)觸發(fā)一次組中各consumer之間的再平衡。
  • 注冊一個(gè)監(jiān)聽器,監(jiān)聽broker id記錄的“變更(新的broker加入或者老的退出)”,每次變更都會(huì)觸發(fā)一次所有組中所有sonsumers之間的再平衡。
  • 如果consumer消息流是使用了topic過濾器,也需要注冊一個(gè)監(jiān)聽器去監(jiān)聽broker topic記錄的變更(新的topic加入)。每次變更都會(huì)觸發(fā)一次對所有的topics的重新評估以決定是否符合這個(gè)過濾器。一個(gè)新的copic會(huì)觸發(fā)一次在所有consumers中的再平衡.
  • 在它所在的組進(jìn)行一次再平衡。
  • Kafka視頻教程同步首發(fā),歡迎觀看! 超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

    總結(jié)

    以上是生活随笔為你收集整理的漫游Kafka实现篇之分布式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。