Kafka學(xué)習(xí)總結(jié)

Kafka是一個分布式消息隊列矿卑,為處理實時數(shù)據(jù)提供一個統(tǒng)一柬焕、高吞吐量、低等待的平臺麻掸,提供了類似于JMS的特性酥夭,但是它并不是JMS規(guī)范的實現(xiàn).

JMS消息傳輸模型
1.點對點模式
2.發(fā)布/訂閱模式(類似于kafka)

生產(chǎn)者消費者模式:Producer->Topic->consumer
ps:消費者組(Consumer Group)才是邏輯上的訂閱者

無論是kafka集群,還是producer和consumer都依賴于zookeeper集群保存一些meta信息。
Kafka文件存儲結(jié)構(gòu):
一臺Kafka服務(wù)器就是一個broker熬北,一個broker中有若干個topic千所,每個topic中有若干partition,所有partition中都有segment分段蒜埋,每個segment都包含兩個文件:index文件和log文件该贾。
broker->topic->partition->segment->index+log

Kafka解決了傳統(tǒng)MQ(MessageQueue)的問題别凤,有別于傳統(tǒng)MQ的新特征:

  1. 異步處理
  2. 消峰
  3. 解耦

一、kafka的partition管理

  • kafka提供高可用,每個partition有若干副本低剔,存放在不同節(jié)點上,也就是不同broker上向臀。
  • 為了方便管理工三,kafka提供了副本選舉機制,由leader同步數(shù)據(jù)到所有follower讲冠。
  • kafka還提供了partition出錯恢復(fù)機制瓜客,包括leader出錯以及follower出錯兩種情況,
    當(dāng)leader出錯之后竿开,kafka會重新選擇序列號最小的follower作為新的leader谱仪,然后將其他follower中HW之后的數(shù)據(jù)整合到新的leader中。
    當(dāng)follower出錯之后否彩,由leader恢復(fù)HW之前的數(shù)據(jù)疯攒,HW之后的數(shù)據(jù)丟失,然后同步數(shù)據(jù)直到達(dá)到leader的LEO列荔,添加到ISR中敬尺。

HW(High Water):leader中的HW是所有副本中最小的LEO,代表所有partition同步完成的數(shù)據(jù)量
LEO(Log End Offset):每個副本最后一個offset的位置

二、ACK應(yīng)答機制

producer會向leader發(fā)送數(shù)據(jù)贴浙,leader接收數(shù)據(jù)之后需要返回一個信息確認(rèn)信息砂吞,這個確認(rèn)信息就是ack。
1.ack=0
leader收到信息之后崎溃,在落地磁盤之前蜻直,就返回ack。
這種方式延遲會降低笨奠,但是出現(xiàn)異常狀態(tài)袭蝗,容易丟失數(shù)據(jù)。
2.ack=1
leader收到信息之后般婆,將數(shù)據(jù)落地磁盤到腥,之后返回ack。
在未同步完數(shù)據(jù)之前就返回ack蔚袍,如果leader出錯乡范,副本數(shù)據(jù)會丟失配名。
3.ack=all
leader收到信息之后,將數(shù)據(jù)落地磁盤晋辆,數(shù)據(jù)同步到所有副本中渠脉,最后返回ack。
這種方式雖然數(shù)據(jù)不容易丟失瓶佳,但也存在數(shù)據(jù)重復(fù)的可能性芋膘,假如leader同步完數(shù)據(jù)之后,在發(fā)送ack之前出錯霸饲,follower中會選舉出新的leader为朋,同時producer接收不到ack,會重新發(fā)送數(shù)據(jù)到新的leader厚脉,新的leader就有了兩份一摸一樣的數(shù)據(jù)习寸。

三、ISR數(shù)據(jù)同步機制

ISR相當(dāng)于一個數(shù)組列表傻工,里面包含所有follower以及l(fā)eader自身霞溪,初始狀態(tài)所有的副本都處于ISR中,當(dāng)一個消息發(fā)送給leader的時候中捆,leader會等待ISR中所有的副本告訴它已經(jīng)接收了這個消息鸯匹,如果一個副本失敗了,那么它會被移除ISR轨香。下一條消息來的時候忽你,leader就會將消息發(fā)送給當(dāng)前的ISR中節(jié)點了。

四臂容、kafka消息快速存儲的底層實現(xiàn)

讀寫磁盤
不同于Redis和傳統(tǒng)MQ等內(nèi)存消息隊列,Kafka的設(shè)計是把所有的Message都要寫入速度低容量大的硬盤根蟹,以此來換取更強的存儲能力脓杉,事實上這種設(shè)計并沒有帶來更多的性能損耗。
順序讀寫
kafka在磁盤上只做順序讀寫简逮,順序讀寫的效率要比隨機讀寫高很多球散,因為只做順序讀寫,所有規(guī)避了磁盤訪問速度低下對性能可能造成的影響散庶。
PageCache
Kafka依賴底層操作系統(tǒng)提供的PageCache功能蕉堰,當(dāng)讀操作發(fā)生時,先從PageCache中查找悲龟,如果發(fā)生缺頁才進(jìn)行磁盤調(diào)度屋讶,最終返回需要的數(shù)據(jù)。使用PageCache功能同時可以避免在JVM內(nèi)部緩存數(shù)據(jù)须教,不受GC的控制皿渗。
Sendfile
Kafka為了進(jìn)一步的優(yōu)化性能還采用了Sendfile技術(shù),簡化了傳統(tǒng)網(wǎng)絡(luò)I/O操作斩芭。

五、如何消費已經(jīng)消費過的數(shù)據(jù)

我們知道offset記錄consumer group消費的信息乐疆,一般情況下消費者組不能直接消費已經(jīng)消費過的數(shù)據(jù)划乖。我們可以采取以下兩種方式間接消費相同的數(shù)據(jù)。
1.我們可以將消費者移到新的消費者組中去消費挤土,在consumer掛掉或者新增consumer的情況下會觸發(fā)kafka負(fù)載均衡重新分配所有consumer琴庵,形成新的消費者組。
2.通過一些配置仰美,就可以將線上產(chǎn)生的數(shù)據(jù)同步到鏡像中去迷殿,然后再由特定的集群區(qū)處理大批量的數(shù)據(jù)。

六筒占、消費者組和分區(qū)的關(guān)系

消費者組訂閱主題贪庙,主題下的所有分區(qū)都被消費『采唬基于此止邮,消費者組和分區(qū)關(guān)系如下:

  1. 分區(qū)數(shù)=消費者數(shù),一個消費者分區(qū)的關(guān)系一一對應(yīng)奏窑。
  2. 分區(qū)數(shù)>消費者數(shù)导披,出現(xiàn)一個消費者消費多個分區(qū)。
  3. 分區(qū)數(shù)<消費者數(shù)埃唯,出現(xiàn)有的消費者空閑的情況撩匕。

如果多個消費者負(fù)責(zé)一個分區(qū)會導(dǎo)致資源浪費,消息處理重復(fù)墨叛,不能保證消息的順序的問題止毕。

七、zookeeper在kafka中的作用

  1. 配置管理
  2. 負(fù)載均衡
  3. 命名服務(wù)
  4. 分布式通知(分區(qū)增加漠趁,topic變動扁凛,Broker上線下線等)
  5. 集群管理和master選舉
  6. 分布式鎖(用于Controller的選舉)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市闯传,隨后出現(xiàn)的幾起案子谨朝,更是在濱河造成了極大的恐慌,老刑警劉巖甥绿,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件字币,死亡現(xiàn)場離奇詭異,居然都是意外死亡共缕,警方通過查閱死者的電腦和手機洗出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骄呼,“玉大人共苛,你說我怎么就攤上這事判没。” “怎么了隅茎?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵澄峰,是天一觀的道長。 經(jīng)常有香客問我辟犀,道長俏竞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任堂竟,我火速辦了婚禮魂毁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘出嘹。我一直安慰自己席楚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布税稼。 她就那樣靜靜地躺著烦秩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郎仆。 梳的紋絲不亂的頭發(fā)上只祠,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音扰肌,去河邊找鬼抛寝。 笑死,一個胖子當(dāng)著我的面吹牛曙旭,可吹牛的內(nèi)容都是我干的盗舰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼桂躏,長吁一口氣:“原來是場噩夢啊……” “哼岭皂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沼头,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎书劝,沒想到半個月后进倍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡购对,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年猾昆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骡苞。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡垂蜗,死狀恐怖楷扬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贴见,我是刑警寧澤烘苹,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站片部,受9級特大地震影響镣衡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜档悠,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一廊鸥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辖所,春花似錦惰说、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至切诀,卻和暖如春揩环,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幅虑。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工丰滑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倒庵。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓褒墨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親擎宝。 傳聞我的和親對象是個殘疾皇子郁妈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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

  • 3. 分布式發(fā)布訂閱消息系統(tǒng)Kafka 3.1 Kafka概述 Kafka官網(wǎng)(http://kafka.apac...
    牦牛sheriff閱讀 1,147評論 0 4
  • 分區(qū)日志、日志段绍申、日志段索引噩咪、日志段時間索引、日志段位移索引极阅、稀疏索引文件 消息設(shè)計 JMM要求Java對象必須按...
    ands999閱讀 624評論 0 0
  • MQ(消息隊列)是跨進(jìn)程通信的方式之一胃碾,可理解為異步rpc,上游系統(tǒng)對調(diào)用結(jié)果的態(tài)度往往是重要不緊急筋搏。使用消息隊列...
    allin8116閱讀 511評論 0 0
  • 1 Kafka概述 1.1 定義 Kafka是一個分布式的基于發(fā)布/訂閱模式的消息隊列仆百,主要應(yīng)用于大數(shù)據(jù)實時處理領(lǐng)...
    djm猿閱讀 683評論 0 4
  • 1.條件判斷和循環(huán) 計算機之所以能做很多自動化的任務(wù),因為它可以自己做條件判斷奔脐。比如俄周,輸入用戶年齡吁讨,根據(jù)年齡打印不...
    anyurchao閱讀 321評論 0 0