提升內(nèi)功-kafka producer 小結(jié)

目錄

  • kafka producer
    • kafka 分區(qū)策略
    • kafka 數(shù)據(jù)可靠性保證 - ack
    • kafka 數(shù)據(jù)一致性保證 - Hw
      • 消費(fèi)一致性
      • 存儲一致性 同少同重復(fù)

1 kafka producer

1.1 分區(qū)策略

1.1.1 分區(qū)的原因

提高并發(fā)或渤,以分區(qū) partition 為單位進(jìn)行讀寫操作

1.1.2 生產(chǎn)者生產(chǎn)消息進(jìn)入的分區(qū)3種策略

這三種策略的前提都是明確知道具體的topic
1. 明確知道partition index饰剥,則直接進(jìn)入指定partition中
2. 不知道partition index,給出了消息對應(yīng)的key,則 hash(key)mod(num(partitions)) 獲取對應(yīng)的分區(qū)partition編號
3. 不知道partition index, 但給出了消息的value蛾洛,第一次調(diào)用時生成一個整數(shù),并記錄下來饺蔑,后面每次調(diào)用在這個整數(shù)上自增变泄,將這個值與topic 可用
的partition 總數(shù)取余 得到partition值,也是常說的 round-robin 算法

1.2 數(shù)據(jù)可靠性保證(非常重要心傀,強(qiáng)烈建議深刻理解)

kafka 通過 leader partition 發(fā)送ack 機(jī)制實(shí)現(xiàn)消息的可靠傳輸屈暗;

1.2.1 leader partition 發(fā)送ack給producer的充要條件:

  1. 確保有follower 與 leader 同步完成,leader 再發(fā)送ack, 這樣能保證leader掛掉之后脂男,follower可以容災(zāi)养叛,并從follower中選舉出新的leader;
  2. 與leader 同步的follower 個數(shù)也有兩種不同的策略:
    • 2.1 半數(shù)以上的follower同步完成,即可發(fā)送ack
      優(yōu)點(diǎn): 延遲比較低
      缺點(diǎn): 選舉新leader時宰翅,容忍n臺節(jié)點(diǎn)故障弃甥,需要2n+1個副本
    • 2.2 全部follower完成同步,才發(fā)送ack
      優(yōu)點(diǎn): 容忍n臺節(jié)點(diǎn)故障汁讼,需要n+1個副本
      缺點(diǎn)淆攻,延遲比較高
      kafka 選用全量同步阔墩,雖然延遲高,但是數(shù)據(jù)副本量比較少

1.2.2 kafka the ISR of leader partition - 解決全量同步過程中follower副本掛掉瓶珊,leader長時間等待的場景

問題1

如果 follower 副本在同步leader 數(shù)據(jù)的過程中啸箫,有一個副本掛掉了,長時間不能跟leader同步艰毒,那么leader就要一直等下去筐高,直到掛掉的follower也同步了
leader 的數(shù)據(jù),才發(fā)送ack丑瞧,這個問題該如何解決?

kafka 通過在leader partition 維護(hù)一個動態(tài)的ISR即同步副本(是個set),來保存與leader保持同步的follower集合柑土。

follower如何被選定為ISR?
older version: 同步時間快慢 + 與leader 差異的數(shù)據(jù)條數(shù) (盡最大努力同步)
0.9 版本 new version 去掉了與leader 差異的數(shù)據(jù)條數(shù)因?yàn)闀l繁操作zk(想象一下 batch_size > 差異數(shù)據(jù)num策略),保留了同步時間策略,用來作為選取follower作為ISR元素的依據(jù)绊汹;
默認(rèn)10s

1.2.3 ack 應(yīng)答機(jī)制

為什么需要ack應(yīng)答機(jī)制
在某些場景下可以容忍數(shù)據(jù)丟失的情況稽屏,對數(shù)據(jù)的可靠性要求不高,能夠容忍數(shù)據(jù)的少量丟失西乖,所有沒有必要等待ISR中的Follower全部接收成功
所以對于不同場景下的數(shù)據(jù)可靠性傳輸狐榔、與數(shù)據(jù)傳輸性能上的要求,kafka對應(yīng)給出了如下三種ack應(yīng)答機(jī)制配置策略获雕。

1.2.3.1 acks = 0

0: producer 不等待 leader partition所在的broker 回傳的ack薄腻,這個操作提供了一個最低的延遲,broker接收到(還沒有寫入磁盤的時候就已經(jīng)返回返回)届案,當(dāng)broker
故障時有可能丟失數(shù)據(jù)
1:producer 等待 leader partition 所在的broker 回傳的ack庵楷,leader partition 落盤成功后返回ack,如果follower同步之前l(fā)eader故障楣颠,
那么將會丟失數(shù)據(jù)尽纽。
-1: producer 等待 leader partition 所在的broker 回傳的ack,partition 的leader 和follower 全部落盤成功后才返回ack童漩。

但是弄贿,注意在 acks = -1時,在極端情況下還是可能會出現(xiàn)數(shù)據(jù)丟失的情況(這種情況很少見矫膨,但不代表沒有)差凹,而且最容易出現(xiàn)的情況是數(shù)據(jù)重復(fù)
下面簡單清晰的描述下這兩種場景:

acks = -1,數(shù)據(jù)丟失 ISR 中的follower副本數(shù)量恰好為0侧馅,即當(dāng)前l(fā)eader partition接收的數(shù)據(jù)直奋,沒有follower 需要同步,且leader partition 發(fā)完ack之后掛掉了施禾,那數(shù)據(jù)就丟失了脚线。
acks = -1, 數(shù)據(jù)重復(fù) 如果ISR 中維護(hù)的 followers 同步完數(shù)據(jù),leader 在發(fā)送ack給producer 之前掛掉了弥搞,那么producer就會重發(fā)數(shù)據(jù)給新晉升的leader邮绿。此時渠旁,數(shù)據(jù)就會重復(fù)發(fā)送。

leader 發(fā)送ack之前掛掉船逮,producer重發(fā)消息給新leader

1.3 數(shù)據(jù)一致性問題

1.3.1 保證消費(fèi)數(shù)據(jù)的一致性

場景描述: leader 接收了新一批數(shù)據(jù)顾腊,但是ISR 中follower還未同步完之前就掛掉了,如下圖所示挖胃,假如consumer已經(jīng)消費(fèi)到了19杂靶,那么接下來將消費(fèi)18,此時
leader掛掉酱鸭,新的follower成為leader吗垮,那么去消費(fèi)offset為18(當(dāng)前最老的數(shù)據(jù))就會報錯。
為應(yīng)對以上問題凹髓,kafka通過HW & LEO 的機(jī)制解決消費(fèi)一致性問題:

leader數(shù)據(jù)多烁登,消費(fèi)完老數(shù)據(jù)后,掛掉了

解決方案:
HW - High water 高水位 即ISR 中所有 follower 中最小的LEO
LEO - 每個副本的最后一個offset

注意: HW 來保證數(shù)據(jù)一致性蔚舀,高水位之前的數(shù)據(jù)是消費(fèi)者可見的饵沧。

1.3.2 腦裂問題-存儲的一致性

可能出現(xiàn)腦裂問題 ,leader 掛掉赌躺,follower 被選舉為新leader狼牺, 先前掛掉的leader又重新活了起來,產(chǎn)生腦裂礼患,如果此時producer又新發(fā)一批次數(shù)據(jù)是钥,
這兩個leader都會接收到數(shù)據(jù),那么數(shù)據(jù)就發(fā)生混亂且不一致了讶泰。
將來消費(fèi)的數(shù)據(jù)都不一樣 。
腦補(bǔ)一下場面就可以了拂到,那么如何解決腦裂產(chǎn)生數(shù)據(jù)不一致問題呢?
新官上任三把火: 告訴所有在ISR中記錄的follower痪署,將數(shù)據(jù)截取到HW, 跟新leader的存儲數(shù)據(jù)保持一致
注意 HW只能保證副本數(shù)據(jù)的一致性,并不能保證數(shù)據(jù)丟不丟失躺翻,或者重不重復(fù)萍启,即要少都少疏虫,要多都多

以上問題討論的都是ISR 記錄的Follower 范圍。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悯森,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绪撵,更是在濱河造成了極大的恐慌瓢姻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件音诈,死亡現(xiàn)場離奇詭異幻碱,居然都是意外死亡绎狭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門褥傍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儡嘶,“玉大人,你說我怎么就攤上這事恍风”目瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵朋贬,是天一觀的道長凯楔。 經(jīng)常有香客問我,道長兄世,這世上最難降的妖魔是什么啼辣? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮御滩,結(jié)果婚禮上鸥拧,老公的妹妹穿的比我還像新娘。我一直安慰自己削解,他們只是感情好富弦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著氛驮,像睡著了一般腕柜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矫废,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天盏缤,我揣著相機(jī)與錄音,去河邊找鬼蓖扑。 笑死唉铜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的律杠。 我是一名探鬼主播潭流,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柜去!你這毒婦竟也來了灰嫉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嗓奢,失蹤者是張志新(化名)和其女友劉穎讼撒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椿肩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年瞻颂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郑象。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贡这,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厂榛,到底是詐尸還是另有隱情盖矫,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布击奶,位于F島的核電站辈双,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柜砾。R本人自食惡果不足惜湃望,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望痰驱。 院中可真熱鬧证芭,春花似錦、人聲如沸担映。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝇完。三九已至官硝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間短蜕,已是汗流浹背氢架。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朋魔,地道東北人岖研。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像铺厨,于是被迫代替她去往敵國和親缎玫。 傳聞我的和親對象是個殘疾皇子硬纤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

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