Kafka玩出植物大戰(zhàn)僵尸即視感

?從這篇文章你將了解到什么侨糟?

Kafka的topic為什么要分區(qū)。
消費者組的作用瘩燥。
Kafka分區(qū)分配秕重。

“Kafka是一個分布式、支持分區(qū)的(partition)厉膀、多副本的(replica)溶耘,基于zookeeper協(xié)調(diào)的分布式消息系統(tǒng)》欤”

看著這一句句對Kafka的介紹凳兵,以及這張架構(gòu)圖, 突然感覺眼前一陣恍惚......

再睜眼的瞬間, 畫風居然變成了植物大戰(zhàn)僵尸的樣子!!!

下面我們來說道說道這有趣的場景:

我們熟悉的消息生產(chǎn)者——自然就是植物大戰(zhàn)僵尸中可以生成糧食的植物了。

比如生產(chǎn)者豌豆射手:

他可以發(fā)送出普通豌豆(消息)企软。

比如生產(chǎn)者寒冰射手:

他可以發(fā)送出寒冰豌豆(消息)庐扫。

再來看看我們可愛的消費者僵尸,他們可以消耗(消費)生產(chǎn)者發(fā)出來的豌豆(消息)澜倦。

而Kafka broker服務(wù)就是一個個炮臺!

炮臺可以儲存豌豆射手發(fā)送過來的豌豆聚蝶, 然后再把這些豌豆投送給僵尸。

ZooKeeper就是僵尸最喜歡的大腦了!

當然這只是一句玩笑藻治,我們消費者僵尸是不會移動的碘勉,也不會去攻擊Zookeeper。

這里要說明一下桩卵,所有消費者僵尸的夢想都是不放過每一顆屬于他的豌豆验靡。他們甚至會主動從炮臺拉取(pull)豌豆過來消耗(消費)。

玩過植物大戰(zhàn)僵尸的小伙伴們都知道雏节,游戲中是沒有Kafka炮臺這種東西的胜嗓。那為什么我們需要Kafka呢?

下面我們來看看,沒有Kafka時钩乍,生產(chǎn)者直接面對消費者僵尸的情況辞州。

1 生產(chǎn)者大戰(zhàn)僵尸

在沒有Kafka的情況下, 豌豆射手(生產(chǎn)者)VS僵尸(消費者)。

豌豆射手要一邊留意僵尸的位置, 一邊費盡全力將豌豆(消息)發(fā)送到僵尸身上!

如果這時候出現(xiàn)一大波新的僵尸!

豌豆射手除了要及時辨認出所有僵尸的位置外, 還要把同一顆豌豆(同一個消息)同時投送給每一個僵尸寥粹。

豌豆射手還要留意投送出去的的豌豆有沒有發(fā)送成功变过,如果一顆豌豆石沉大海,那到底是這個僵尸已經(jīng)掛了涝涤,還是方向射偏了媚狰?同時還要從萬千消費者中找到這個投送失敗的僵尸,重新投送阔拳。

這也太累了吧!

而從僵尸的角度上看呢, 他除了要消耗每一個豌豆, 還要費勁辨認出每一個豌豆射手的位置, 否則的話, 就接不到豌豆射手投出來的豌豆了!

隨著生產(chǎn)者和消費者的增多崭孤,他們之間的關(guān)系也就越來越混亂。這樣一來, 不僅豌豆射手累, 僵尸也累!

2 Kafka大戰(zhàn)僵尸

如果在豌豆射手和僵尸之間加上一個Kafka炮臺(kafka broker)會怎么樣呢?

現(xiàn)在豌豆射手只需要關(guān)心Kafka炮臺的位置, 然后把豌豆發(fā)送給Kafka炮臺存儲起來。豌豆射手不用再關(guān)心有多少個消費者僵尸, 只要一心一意地生產(chǎn)豌豆就好, 多舒心!

而消費者僵尸呢辨宠, 同樣也不需要關(guān)心有多少生產(chǎn)者遗锣,只需要記住Kafka炮臺的位置,專心消耗豌豆就行彭羹。

Kafka的使用場景之一就是解耦生產(chǎn)者和消費者黄伊,生產(chǎn)者和消費者不再直接接觸。

消費者組

Kafka炮臺支持兩種豌豆投遞方式派殷。

把消費者僵尸劃分成不同的消費者組还最,那么就可以實現(xiàn)點對點模式和廣播模式。

如果每個消費者僵尸屬于不同的消費組毡惜,那么同一顆豌豆會被“廣播”給每個消費組內(nèi)的僵尸拓轻。

如果每個消費者僵尸都在同一個消費組,那么同一顆豌豆经伙,每一個消費組內(nèi)只能有一個僵尸能消耗這顆豌豆扶叉。

主題與訂閱

生產(chǎn)者有很多類型,有普通豌豆射手帕膜,有寒冰射手枣氧,有火焰射手等等,這些生產(chǎn)者發(fā)出來的豌豆就分別對應(yīng)3個Topic:普通主題垮刹,寒冰主題达吞, 火焰主題。

主題如果沒有分區(qū)荒典,那么就意味著每個炮臺只能接收一種主題的豌豆酪劫。

如果一個炮臺接收了寒冰豌豆,那么他就不能再接收普通豌豆寺董。

消費者僵尸也有很多種類型覆糟,寒冰僵尸擅長消耗寒冰豌豆,火焰抗性高的僵尸擅長消耗火焰豌豆遮咖。

不同的消費者僵尸會主動從Kafka炮臺“訂閱”自己感興趣的主題滩字。比如寒冰僵尸會專門去消耗寒冰豌豆,普通僵尸會專門去消耗普通豌豆御吞。

主題沒有分區(qū)的弊端

很多不同類型生產(chǎn)者其實都可以生產(chǎn)普通豌豆踢械,比如二連豌豆,三連豌豆魄藕,加特林豌豆(四連發(fā)),甚至還有可以五連發(fā)的豌豆莢撵术。


如果現(xiàn)在戰(zhàn)場上投入一批五連發(fā)的豌豆莢背率!

可以預(yù)見的是,將會有巨量的普通豌豆發(fā)送到普通主題炮臺中,很快這個炮臺就會積壓很多豌豆發(fā)送不出去寝姿,并且還有可能因為負載過大而宕機交排,而與此形成鮮明對比的是,其他主題的炮臺卻是處于空閑狀態(tài)饵筑,連一顆寒冰/火焰豌豆都接收不到埃篓。

而站在消費組僵尸的角度上看,即使現(xiàn)在新增再多的消費者根资,也無法加速豌豆的消耗架专,因為Kafka炮臺已經(jīng)成為吞吐量的瓶頸。

3 主題分區(qū)

如果我們讓每個炮臺都可以接收多種主題的豌豆, 這樣就可以充分利用場上的每一個炮臺了玄帕。這就是主題的分區(qū)部脚。

假如現(xiàn)在我們給普通豌豆主題2個分區(qū), 這2個分區(qū)分別分布在兩個炮臺中裤纹。

這樣場上所有炮臺可以接收普通豌豆子彈委刘,理想狀態(tài)下,是可以減緩了單一炮臺的壓力鹰椒,這就是主題分區(qū)的特點之一锡移,分布式存儲

而對于消費者僵尸而言漆际,現(xiàn)在同一時間可以有兩個消費者僵尸消耗普通豌豆淆珊, 加快了豌豆的消耗速度,這主題分區(qū)的另一個特點灿椅,分布式消費套蒂。

4 分區(qū)分配

現(xiàn)在主題有了分區(qū),在獲得了很多好處的同時茫蛹,又必然會引申出一系列復(fù)雜的問題操刀。

生產(chǎn)者的分區(qū)分配

如圖,如果豌豆莢每次給主題分區(qū)1和分區(qū)2按4:1的比例發(fā)放豌豆婴洼,那么最后還是會導(dǎo)致分區(qū)1所在的Kafka炮臺負擔過重骨坑。

所有現(xiàn)在生產(chǎn)者要考慮怎么才能把豌豆均勻地分發(fā)給各個Kafka炮臺。

在Kafka中柬采,如果生產(chǎn)者有指定分區(qū)號欢唾,那么消息會直接發(fā)往指定的分區(qū)。否則會提供默認的分區(qū)器DefaultPartitioner粉捻,對消息的key進行哈希運算得到分區(qū)號礁遣。如果消息沒有key,那么就會采用輪詢的方式給主題下的各個分區(qū)發(fā)送消息肩刃。

消費者的分區(qū)分配

如圖祟霍,如果兩個分區(qū)的豌豆都由同一個消費者僵尸負責消耗杏头,另一個消費者將無所事事,這就是消費者分區(qū)分配不均的情況沸呐。

所以醇王,消費者僵尸也要討論由哪些僵尸負責消耗哪些分區(qū)的豌豆,讓每個僵尸都可以均勻地承受打擊崭添。

Kafka提供的消費者分區(qū)分配策略有三種寓娩,分別是RangeAssignor、RoundRobinAssignor和StickyAssignor呼渣。每種策略的具體細節(jié)屬于僵尸大軍中的“高度機密”(面試高頻)棘伴,我們將在下一篇文章中進行講解。

broker端的分區(qū)分配

思考一下徙邻,如果一個生產(chǎn)者把所有豌豆發(fā)送給炮臺存儲后排嫌,炮臺宕機了,那這批豌豆就丟失了缰犁,那怎么才能避免這問題呢淳地?這就是數(shù)據(jù)的容災(zāi)能力問題了。

我們給每個主題的分區(qū)引入副本的概念帅容。

如果每一個分區(qū)都有2個副本颇象,副本之間的關(guān)系是一個Leader對多個follower。

只有Leader副本才能存儲豌豆并徘,其他副本只是同步Leader的數(shù)據(jù)遣钳。

如果Leader宕機了,那么就會在剩下的副本中選出新的Leader麦乞。這就實現(xiàn)了故障的自動轉(zhuǎn)移蕴茴。

Kafka集群在創(chuàng)建主題時,就要考慮分區(qū)副本應(yīng)該分配在哪個broker上姐直。

而引入副本機制后倦淀,與此相關(guān)的優(yōu)先副本選舉,副本之間的同步機制等問題又是一次長篇大論了声畏。

5 后續(xù)

由于篇幅有限撞叽,很多沒有提及的問題,就留到下一篇再講解了插龄。

ZooKeeper的作用愿棋。

分區(qū)的有序性。

分區(qū)數(shù)均牢。

重平衡糠雨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市徘跪,隨后出現(xiàn)的幾起案子见秤,更是在濱河造成了極大的恐慌砂竖,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹃答,死亡現(xiàn)場離奇詭異,居然都是意外死亡突硝,警方通過查閱死者的電腦和手機测摔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來解恰,“玉大人锋八,你說我怎么就攤上這事』び” “怎么了挟纱?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長腐宋。 經(jīng)常有香客問我紊服,道長,這世上最難降的妖魔是什么胸竞? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任欺嗤,我火速辦了婚禮,結(jié)果婚禮上卫枝,老公的妹妹穿的比我還像新娘煎饼。我一直安慰自己,他們只是感情好校赤,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布吆玖。 她就那樣靜靜地躺著,像睡著了一般马篮。 火紅的嫁衣襯著肌膚如雪沾乘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天积蔚,我揣著相機與錄音意鲸,去河邊找鬼。 笑死尽爆,一個胖子當著我的面吹牛怎顾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漱贱,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼槐雾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了幅狮?” 一聲冷哼從身側(cè)響起募强,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤株灸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后擎值,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慌烧,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年鸠儿,在試婚紗的時候發(fā)現(xiàn)自己被綠了屹蚊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡进每,死狀恐怖汹粤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情田晚,我是刑警寧澤嘱兼,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站贤徒,受9級特大地震影響芹壕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泞莉,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一哪雕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲫趁,春花似錦斯嚎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疫剃,卻和暖如春钉疫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巢价。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工牲阁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人壤躲。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓城菊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碉克。 傳聞我的和親對象是個殘疾皇子凌唬,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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