kafka學(xué)習(xí)筆記

  1. Kafka概述
    是一個(gè)分布式的基于發(fā)布訂閱模式的消息隊(duì)列
    2.Kafka幾個(gè)角色
    Broker: 每一個(gè)kafka進(jìn)程實(shí)例
    Topic:用來對(duì)消息進(jìn)行分類
    Partition: 分區(qū)择诈,用于對(duì)某個(gè)topic做發(fā)送的負(fù)載均衡
    Leader:生產(chǎn)者和消費(fèi)者對(duì)某一個(gè)topic實(shí)際發(fā)送和消費(fèi)的來源
    Follower:對(duì)某一個(gè)topic做冗余備份
    Producer:消息生產(chǎn)者
    Consumer:消息消費(fèi)者

Topic-》分區(qū)-》 分區(qū)副本
一個(gè)topic可以通過負(fù)載均衡到不同的partition-leader中豪诲。每個(gè)partition-leader又可以有自己的分區(qū)副本partition-follower

Consumergroup-》consumer-》分區(qū)
一個(gè)消費(fèi)者組里面可以有多個(gè)消費(fèi)者商佛,每個(gè)消費(fèi)者對(duì)同一個(gè)topic的不同partition-leader進(jìn)行消費(fèi)。但是不同消費(fèi)者組里面的不同消費(fèi)者可以對(duì)同一個(gè)topic的不同partition-leader進(jìn)行消費(fèi)

Consumergroup可以做消費(fèi)者消費(fèi)的負(fù)載均衡

Zk: 用來管理 kafka集群的元數(shù)據(jù)信息,以及保存消費(fèi)進(jìn)度(跟kafka版本有關(guān)系,0.9之前是存在在zk中。0.9之后存在 kafka本地(topic- counsumer-offsets)的系統(tǒng)topic中)
3.消息的有序性
由于分區(qū)的存在卷谈,每個(gè)topic下的所有分區(qū)都各自維護(hù)了自己的offset。Kafka無法保證topic的全局的有序性霞篡,只能保證區(qū)內(nèi)的有序性
4.Kafka的文件存儲(chǔ)
.Index 和 .log

.Index 存儲(chǔ)偏移量及在.log文件中的偏移量世蔗,消息長(zhǎng)度
.log 存儲(chǔ)topic某一個(gè)分區(qū)下的所有消息,a和消息的偏移量

kafka文件的命名方式朗兵,是以當(dāng)前第一條消息的起始偏移量進(jìn)行命名的凸郑。這樣做是方便消費(fèi)者拉取消息的時(shí)候快速定位到消息所在的index文件。

5.kafka消費(fèi)者是如何找到需要消費(fèi)的消息矛市?
消費(fèi)者通過偏移量和二分查找法找到消息所在的index文件芙沥,在index文件中找到對(duì)應(yīng)的在log文件中的偏移量。 當(dāng)找到偏移量后 去log文件獲取消息內(nèi)容

6.生產(chǎn)者的分區(qū)策略
類似于rocketmq的生產(chǎn)者發(fā)送負(fù)載均衡算法

7.Kafka的ack機(jī)制浊吏,通過生產(chǎn)者acks參數(shù)進(jìn)行配置
0:producer只管發(fā)送數(shù)據(jù)就返回ack而昨,broker掛了或者發(fā)送時(shí)由于網(wǎng)絡(luò)的原因會(huì)導(dǎo)致數(shù)據(jù)丟失
1: leader落盤后發(fā)送ack給發(fā)送者,發(fā)送ack前找田,leader掛了會(huì)導(dǎo)致數(shù)據(jù)丟失
-1: leader和ISR 中的follower都落盤后發(fā)送ack給發(fā)送者歌憨,如果在發(fā)送ack前,leader掛了墩衙,會(huì)導(dǎo)致數(shù)據(jù)重復(fù)

8.Kafka集群數(shù)據(jù)一致性务嫡,hw和leo
每個(gè)副本的 高水位和 最大偏移量
在同一個(gè)分區(qū)內(nèi),取分區(qū)內(nèi)所有副本中最大偏移量最小的那個(gè)偏移量作為高水位漆改,因此同一個(gè)分區(qū)內(nèi)的所有副本的高水位都是相同的心铃。 高水位之前的數(shù)據(jù)是消費(fèi)者可見的數(shù)據(jù)
9.exactly once語義
精準(zhǔn)一次性的將消息發(fā)送到kafka集群,保證不出現(xiàn)數(shù)據(jù)丟失和數(shù)據(jù)重復(fù)的情況
當(dāng)ack為0時(shí)挫剑,可以保證消息最多發(fā)送一次
當(dāng)ack為-1是去扣,可以保證消息至少發(fā)送一次,數(shù)據(jù)不會(huì)丟失

精準(zhǔn)一致性 = 至少一次 + 冪等性

Kafka通過分配給producer的pid 樊破,發(fā)送消息的partition愉棱,每條消息攜帶的seqnum,來對(duì)重復(fù)消息進(jìn)行去重哲戚。 kafka不能保證跨會(huì)話或者跨分區(qū)的冪等性


kafka精準(zhǔn)一次性

10.消費(fèi)者的分區(qū)策略
Round robin:按同一消費(fèi)者組中的所有消費(fèi)者訂閱的所有主題的分區(qū)進(jìn)行分配分區(qū)
問題:當(dāng)消費(fèi)者組中的消費(fèi)者消費(fèi)了不同的主題奔滑,會(huì)發(fā)生有一些分區(qū)沒辦法進(jìn)行正常的消費(fèi)數(shù)據(jù)
Range(kafka默認(rèn)): 按同一消費(fèi)者組中的消費(fèi)者訂閱的某一個(gè)主題的分區(qū)進(jìn)行分配分區(qū)
問題:會(huì)出現(xiàn)消費(fèi)不均衡
當(dāng)消費(fèi)者數(shù)目發(fā)生變化,會(huì)觸發(fā)分區(qū)重分配

11.消費(fèi)者的offset的存儲(chǔ)
Consumergroup + topic + partition來確定消費(fèi)者的消費(fèi)進(jìn)度顺少,即使這個(gè)分區(qū)被該消費(fèi)者組下的新的消費(fèi)者進(jìn)行消費(fèi)也可以拿到上一個(gè)消費(fèi)者消費(fèi)的offset
消費(fèi)者每隔1s提交offset到系統(tǒng)主題中__consumer_offset

12.kafka高效讀寫數(shù)據(jù)
順序?qū)懘疟P朋其,零拷貝技術(shù)王浴,分布式

13.Kafka的事務(wù)
生產(chǎn)者事務(wù):
Pid只能保證單分區(qū)和單會(huì)話的精準(zhǔn)一次性。要實(shí)現(xiàn)跨會(huì)話和分區(qū)的精準(zhǔn)一次性就需要用到生產(chǎn)者事務(wù)令宿。那么什么是生產(chǎn)者事務(wù)呢?
生產(chǎn)者客戶端將消息攜帶上Transaction id 和 pid綁定腕窥,交由 kafka的transaction coordinator進(jìn)行維護(hù)


事務(wù)跨會(huì)話跨分區(qū)的精準(zhǔn)一次性

image.png

消費(fèi)者事務(wù):
Kafka的消費(fèi)者事務(wù)較弱粒没。因?yàn)橄M(fèi)者是通過offset進(jìn)行消費(fèi)的

14.Kafka的再均衡
再均衡是指當(dāng)分區(qū)的所屬消費(fèi)者個(gè)數(shù)發(fā)生變更的時(shí)候,再均衡發(fā)生期間簇爆,消費(fèi)者無法拉取消息癞松。即使當(dāng)消費(fèi)者個(gè)數(shù)大于分區(qū)數(shù)的時(shí)候,消費(fèi)者個(gè)數(shù)發(fā)生變化了還是會(huì)出發(fā)再均衡

15.Kafka的ISR入蛆,同步副本
Kafka沒有采取半數(shù)同步的機(jī)制(半數(shù)同步機(jī)制在允許N個(gè)節(jié)點(diǎn)掛掉時(shí)候响蓉,需要有2n+1個(gè)節(jié)點(diǎn),最后才能保證有1個(gè)點(diǎn)是已經(jīng)被同步過的)哨毁。kafka采取了全數(shù)同步的機(jī)制(這個(gè)會(huì)有點(diǎn)問題枫甲,當(dāng)進(jìn)行ack的時(shí)候,有一個(gè)節(jié)點(diǎn)掛掉了扼褪,那么這個(gè)時(shí)候就永遠(yuǎn)不可以完成ack了)想幻,因此kafka并且做了一些優(yōu)化,也就是ISR话浇,每一個(gè)分區(qū)都會(huì)有一個(gè)ISR脏毯,里面存放的是該分區(qū)的同步的副本。之后數(shù)據(jù)的同步幔崖,以及l(fā)eader的選舉都是在ISR中進(jìn)行的


同步副本

16.Kafka的故障處理
hw和leo食店。 hw保證消費(fèi)的一致性和分區(qū)副本存儲(chǔ)的一致性。
消費(fèi)的一致性:超過hw的不可以被消費(fèi)赏寇。假設(shè)如果超過hw的可以被進(jìn)行消費(fèi)吉嫩,那么由于ISR中的leo會(huì)有可能不同,當(dāng)leader出現(xiàn)故障了嗅定,由于已消費(fèi)的offset>新leader的leo率挣,導(dǎo)致后續(xù)消費(fèi)者無法再進(jìn)行消費(fèi)。
存儲(chǔ)的一致性:當(dāng)ISR的leader節(jié)點(diǎn)發(fā)生故障的時(shí)候露戒,為了保證副本之間的一致性椒功,選舉的新的leader會(huì)讓follower高出自己的進(jìn)行截?cái)啵绻鹒ollower高出了hw也進(jìn)行截?cái)嘀鞘玻WC了新的ISR中各副本數(shù)據(jù)的一致性
因此hw只能保證副本之間的數(shù)據(jù)一致性动漾,不能保證數(shù)據(jù)不丟失或者不丟失,數(shù)據(jù)是否丟失應(yīng)該由ack機(jī)制來保證荠锭。

17.分區(qū)策略
RoundRobin:針對(duì)消費(fèi)者組里消費(fèi)者訂閱的所有主題來分旱眯,當(dāng)消費(fèi)者組里的消費(fèi)者訂閱了不同的主題就會(huì)有可能導(dǎo)致錯(cuò)分。所以使用這種方式約定,消費(fèi)者組里的消費(fèi)者訂閱的主題需要相同
Range:默認(rèn)删豺,按照主題的分區(qū)按范圍來分給消費(fèi)者組中的消費(fèi)者

補(bǔ)充分區(qū)分配策略的舉例:(2020-10-21)
兩個(gè)topic共虑,每個(gè)topic10個(gè)分區(qū):
topic1: A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
topic2: B1 B2 B3 B4 B5 B6 B7 B8 B9 B10
消費(fèi)者三個(gè),都訂閱了topic1呀页、topic2:
C1
C2
C3

range:
C1: A1 A2 A3 A4 B1 B2 B3 B4
C2: A5 A6 A7 B5 B6 B7
C3: A8 A9 A10 B7 B8 B9 B10

roundrobin:
C1: A1 A4 A7 A10 B3 B6 B9
C2: A2 A5 A8 B1 B4 B7 B10
C3: A3 A6 A9 B2 B5 B8

sticky:
目標(biāo):分配的更均勻妈拌, 再均衡時(shí)會(huì)盡量避免消費(fèi)者的分區(qū)出現(xiàn)變化
如果訂閱和topic是均勻的,那么分配的結(jié)果和roundrobin是一致

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蓬蝶,一起剝皮案震驚了整個(gè)濱河市尘分,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丸氛,老刑警劉巖培愁,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缓窜,居然都是意外死亡定续,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門禾锤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來香罐,“玉大人,你說我怎么就攤上這事时肿”用#” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵螃成,是天一觀的道長(zhǎng)旦签。 經(jīng)常有香客問我,道長(zhǎng)寸宏,這世上最難降的妖魔是什么宁炫? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮氮凝,結(jié)果婚禮上羔巢,老公的妹妹穿的比我還像新娘。我一直安慰自己罩阵,他們只是感情好竿秆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稿壁,像睡著了一般幽钢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傅是,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天匪燕,我揣著相機(jī)與錄音蕾羊,去河邊找鬼。 笑死帽驯,一個(gè)胖子當(dāng)著我的面吹牛龟再,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尼变,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼利凑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了享甸?” 一聲冷哼從身側(cè)響起截碴,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤梳侨,失蹤者是張志新(化名)和其女友劉穎蛉威,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體走哺,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚯嫌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丙躏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片择示。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晒旅,靈堂內(nèi)的尸體忽然破棺而出栅盲,到底是詐尸還是另有隱情,我是刑警寧澤废恋,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布谈秫,位于F島的核電站,受9級(jí)特大地震影響鱼鼓,放射性物質(zhì)發(fā)生泄漏拟烫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一迄本、第九天 我趴在偏房一處隱蔽的房頂上張望硕淑。 院中可真熱鬧,春花似錦嘉赎、人聲如沸置媳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽半开。三九已至,卻和暖如春赃份,著一層夾襖步出監(jiān)牢的瞬間寂拆,已是汗流浹背奢米。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纠永,地道東北人鬓长。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尝江,于是被迫代替她去往敵國(guó)和親涉波。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349