Kafka基礎(chǔ)知識(shí)04 -- 集群中的controller, rebalance, HW,Kafka中的優(yōu)化問(wèn)題

Kafka集群中的controller, rebalance, HW

1. controller

集群中誰(shuí)來(lái)充當(dāng)controller

每個(gè)broker啟動(dòng)時(shí)會(huì)向zk創(chuàng)建一個(gè)臨時(shí)序號(hào)節(jié)點(diǎn),獲得的序號(hào)最小的那個(gè)broker將會(huì)作為集群中的controller濒旦,負(fù)責(zé)幾件事:

\bullet ?當(dāng)集群中有一個(gè)副本的leader掛掉痹兜,需要在集群中選舉出一個(gè)新的leader,選舉的規(guī)則是從isr集合中最左邊獲得耕陷。

\bullet ?當(dāng)集群中有broker新增或減少,controller會(huì)同步信息給其他broker

\bullet ?當(dāng)集群中有分區(qū)新增或減少据沈,controller會(huì)同步信息給其他broker

2. rebalance機(jī)制

\bullet ?前提:消費(fèi)組中的消費(fèi)者沒有指明分區(qū)來(lái)消費(fèi)

\bullet ?觸發(fā)的條件:當(dāng)消費(fèi)組中的消費(fèi)者和分區(qū)的關(guān)系發(fā)生變化的時(shí)候

\bullet ?分區(qū)分配的策略:在rebalance之前哟沫,分區(qū)怎么分配會(huì)有三種策略

? ??????\circ ?range:根據(jù)公式計(jì)算得到每個(gè)消費(fèi)者消費(fèi)哪幾個(gè)區(qū)域:

????????????????前面的消費(fèi)者是:(分區(qū)總數(shù) / 消費(fèi)者數(shù)量)+1

? ? ? ? ? ? ????之后的消費(fèi)者是:分區(qū)總數(shù) / 消費(fèi)者數(shù)量

? ??????\circ ?輪詢:大家輪著來(lái)

????? ??\circ ?sticky:粘合策略,如果需要rebalance锌介,會(huì)在之前已分配的基礎(chǔ)上進(jìn)行調(diào)整嗜诀,不會(huì)改變之前的分配情況。如果這個(gè)策略沒有開孔祸,那么就要進(jìn)行全部的重新分配隆敢,建議開始。

3. HW和LEO

LEO是某個(gè)副本最后消息的消息位置(log-end-offset)

HW是已完成同步的位置崔慧。消息在寫入broker時(shí)拂蝎,且每個(gè)broker完成這條消息的同步后,hw才會(huì)變化惶室。在這之前消費(fèi)者是消費(fèi)不到這條消息的温自。在同步完成之后玄货,HW更新之后,消費(fèi)者才能消費(fèi)到這條消息悼泌,這樣的目的是防止消息的丟失松捉。

千鋒教育

還有一種情況,如果broker0在更新完最新消息馆里,且同步給了broker1惩坑,消費(fèi)者已經(jīng)讀完最新消息,如果這時(shí)broker0掛掉也拜,那么broker1會(huì)成為新的leader以舒,這是最新消息會(huì)被消費(fèi)者再次讀取,造成了消費(fèi)的重復(fù)讀慢哈。

Kafka中的優(yōu)化問(wèn)題

1. 如何防止消息丟失

\bullet ?生產(chǎn)者:1) 使用同步發(fā)送? 2) 把a(bǔ)ck設(shè)成1或者all蔓钟,并且設(shè)置同步的分區(qū)數(shù)>=2

\bullet ?消費(fèi)者:把自動(dòng)提交改成手動(dòng)提交

2. 如何防止重復(fù)消費(fèi)

在防止消息丟失的方案中,如果生產(chǎn)者發(fā)送完消息后卵贱,因?yàn)榫W(wǎng)絡(luò)抖動(dòng)滥沫,沒有收到ack,但實(shí)際上broker已經(jīng)收到了键俱。此時(shí)生產(chǎn)者會(huì)進(jìn)行重試兰绣,于是broker就會(huì)收到多條相同的消息,而造成消費(fèi)者的重復(fù)消費(fèi)编振。

怎么解決:

\bullet ?生產(chǎn)者關(guān)閉重試:會(huì)造成丟失消息(不建議)

\bullet ?消費(fèi)者解決非冪等性消費(fèi)問(wèn)題:

所謂冪等性:多次訪問(wèn)的結(jié)果是一樣的缀辩。對(duì)于restful的請(qǐng)求(get(冪等), post(非冪等), put(冪等), delete(冪等))

解決方案:

? ??\circ ?在數(shù)據(jù)庫(kù)中創(chuàng)建聯(lián)合索引,防止相同的主鍵創(chuàng)建出多條記錄

? ??\circ ?使用分布式鎖踪央,以業(yè)務(wù)id為鎖臀玄,保證只有一條記錄能夠創(chuàng)建成功

?千鋒教育

3. 如何做到消息的順序消費(fèi)

\bullet ?生產(chǎn)者:保證消息按順序消費(fèi),且消息不丟失 -- 使用同步的發(fā)送畅蹂,ack設(shè)置成非0的值

\bullet ?消費(fèi)者:主題只能設(shè)置一個(gè)分區(qū)健无,消費(fèi)組中只能有一個(gè)消費(fèi)者

kafka的順序消費(fèi)使用場(chǎng)景不多,因?yàn)闋奚袅诵阅芤盒保潜热鏡ocketMQ在這一塊有專門的功能已設(shè)計(jì)好累贤。

4. 如何解決消息積壓?jiǎn)栴}

千鋒教育

1) 消息積壓?jiǎn)栴}的出現(xiàn)

消息的消費(fèi)者的消費(fèi)速度,遠(yuǎn)趕不上生產(chǎn)者的生產(chǎn)消息的速度少漆,導(dǎo)致kafka中有大量的數(shù)據(jù)沒有被消費(fèi)臼膏。隨著沒有被消費(fèi)的數(shù)據(jù)堆積越多,消費(fèi)者尋址的性能會(huì)越來(lái)越差检疫,最后導(dǎo)致整個(gè)kafka對(duì)外提供的服務(wù)的性能很差讶请,從而造成其他服務(wù)也訪問(wèn)速度變慢祷嘶,造成服務(wù)雪崩屎媳。

2) 消息積壓的解決方案

\bullet ?在這個(gè)消費(fèi)者中夺溢,使用多線程,充分利用機(jī)器的性能進(jìn)行消息消費(fèi)

\bullet ?通過(guò)業(yè)務(wù)的架構(gòu)設(shè)計(jì)烛谊,提升業(yè)務(wù)層面消費(fèi)的性能

\bullet ?創(chuàng)建多個(gè)消費(fèi)組风响,多個(gè)消費(fèi)者,部署到其他機(jī)器上丹禀,一起消費(fèi)状勤,提高消費(fèi)者的消費(fèi)速度

\bullet ?創(chuàng)建一個(gè)消費(fèi)者,該消費(fèi)者在kafka另建一個(gè)主題双泪,配上多個(gè)分區(qū)持搜,多個(gè)分區(qū)再配上多個(gè)消費(fèi)者。該消費(fèi)者將poll下來(lái)的消息焙矛,不進(jìn)行消費(fèi)葫盼,直接轉(zhuǎn)發(fā)到新建的主題上。此時(shí)村斟,新的主題的多個(gè)分區(qū)的多個(gè)消費(fèi)者就開始一起消費(fèi)了贫导。--不常用

千鋒教育

5. 實(shí)現(xiàn)延時(shí)隊(duì)列的效果

1) 應(yīng)用場(chǎng)景

訂單創(chuàng)建后,超過(guò)30分鐘沒有支付蟆盹,則需要取消訂單孩灯,這種場(chǎng)景可以通過(guò)延時(shí)隊(duì)列來(lái)實(shí)現(xiàn)

2) 具體方案

千鋒教育

\bullet ?kafka中創(chuàng)建相應(yīng)的主題

\bullet ?消費(fèi)者消費(fèi)該主題的消息(輪詢)

\bullet ?消費(fèi)者消費(fèi)消息時(shí)判斷消息的創(chuàng)建時(shí)間和當(dāng)前時(shí)間是否超過(guò)30分鐘(前提是訂單沒支付)

? ??\circ ?如果是:去數(shù)據(jù)庫(kù)中修改訂單狀態(tài)為已取消

? ??\circ ?如果否:記錄當(dāng)前消息的offset,并不再繼續(xù)消費(fèi)之后的消息逾滥,等待1分鐘之后峰档,再次向kafka拉取該offset及之后的消息,繼續(xù)進(jìn)行判斷寨昙,以此反復(fù)面哥。

6. 搭建kafka-wagle監(jiān)控平臺(tái)

\bullet ?去kafka-eagle官網(wǎng)下載壓縮包

Download - EFAK (kafka-eagle.org)

\bullet ?分配一臺(tái)虛擬機(jī)

\bullet ?虛擬機(jī)中安裝jdk

\bullet ?解壓縮kafka-eagle的壓縮包

\bullet ?給kafka-eagle配置環(huán)境變量

千鋒教育

\bullet ?需要修改kafka-eagle內(nèi)部的配置文件:vim system-config.properties

修改里面的zk的地址和mysql的地址

\bullet ?進(jìn)入到bin中,通過(guò)命令來(lái)啟動(dòng)

千鋒教育
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毅待,一起剝皮案震驚了整個(gè)濱河市尚卫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尸红,老刑警劉巖吱涉,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異外里,居然都是意外死亡怎爵,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門盅蝗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鳖链,“玉大人,你說(shuō)我怎么就攤上這事≤轿” “怎么了逞敷?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)灌侣。 經(jīng)常有香客問(wèn)我推捐,道長(zhǎng),這世上最難降的妖魔是什么侧啼? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任牛柒,我火速辦了婚禮,結(jié)果婚禮上痊乾,老公的妹妹穿的比我還像新娘皮壁。我一直安慰自己,他們只是感情好哪审,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布闪彼。 她就那樣靜靜地躺著,像睡著了一般协饲。 火紅的嫁衣襯著肌膚如雪畏腕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天茉稠,我揣著相機(jī)與錄音描馅,去河邊找鬼。 笑死而线,一個(gè)胖子當(dāng)著我的面吹牛铭污,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膀篮,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼嘹狞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了誓竿?” 一聲冷哼從身側(cè)響起磅网,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筷屡,沒想到半個(gè)月后涧偷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毙死,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年燎潮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扼倘。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡确封,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爪喘,我是刑警寧澤颜曾,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站腥放,受9級(jí)特大地震影響泛啸,放射性物質(zhì)發(fā)生泄漏绿语。R本人自食惡果不足惜秃症,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吕粹。 院中可真熱鬧种柑,春花似錦、人聲如沸匹耕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)稳其。三九已至驶赏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間既鞠,已是汗流浹背煤傍。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘱蛋,地道東北人蚯姆。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像洒敏,于是被迫代替她去往敵國(guó)和親龄恋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 本文包括kafka的定義凶伙、安裝郭毕、啟動(dòng)、架構(gòu)函荣、工作流程铣卡、原理、生產(chǎn)者偏竟、消費(fèi)者煮落、分區(qū)、ISR節(jié)點(diǎn)踊谋、HW蝉仇、分區(qū)分配策略、...
    不怕天黑_0819閱讀 1,952評(píng)論 0 17
  • github地址:https://github.com/douzixiansheng/MQ/blob/master...
    西葫蘆炒胖子閱讀 462評(píng)論 0 0
  • kafka是一個(gè)分布式的基于發(fā)布/訂閱模式的消息隊(duì)列(Message Queue),主要應(yīng)用于大數(shù)據(jù)實(shí)時(shí)處理領(lǐng)域轿衔。...
    dev_winner閱讀 514評(píng)論 0 2
  • 為什么需要使用kafka 從本質(zhì)上來(lái)講沉迹,是因?yàn)榛ヂ?lián)網(wǎng)發(fā)展太快,使用單體架構(gòu)無(wú)疑會(huì)是的體量巨大害驹。而微服務(wù)架構(gòu)可以很好...
    wxxhfg閱讀 2,405評(píng)論 2 20
  • Kafka 概述 Kafka 最初是由 LinkedIn 即領(lǐng)英公司基于 Scala 和 Java 語(yǔ)言開發(fā)的分布...
    you的日常閱讀 460評(píng)論 1 1