參考:極客時(shí)間-Kafka核心技術(shù)與實(shí)戰(zhàn)
內(nèi)容:kafka副本機(jī)制蜗帜、消費(fèi)者重平衡缴淋、kafka控制器旱函、消息可見性(高水位)响巢。
1. kafka副本機(jī)制
副本機(jī)制的好處:
- 提供數(shù)據(jù)冗余
- 提供高伸縮性
- 改善數(shù)據(jù)局部性
副本定義:
只能追加寫消息的提交日志。
副本角色:
基于領(lǐng)導(dǎo)者(Leader-based)的副本機(jī)制棒妨。
- 副本分成兩類:領(lǐng)導(dǎo)者副本(Leader Replica)和追隨者副本(Follower Replica)踪古。
- 領(lǐng)導(dǎo)者副本處理所有的請(qǐng)求卵渴,追隨者副本從領(lǐng)導(dǎo)者副本異步拉取消息溜腐。
- 領(lǐng)導(dǎo)者副本掛了阱驾,追隨者副本會(huì)被選舉成新的領(lǐng)導(dǎo)者恨统。
基于領(lǐng)導(dǎo)者副本機(jī)制的好處:
- 方便實(shí)現(xiàn)“Read-your-writes”
- 方便實(shí)現(xiàn)單調(diào)讀(Monotonic Reads)
In-sync Replicas(ISR):
- Leader副本在ISR副本集合中
- Follower副本落后Leader副本的時(shí)間不超過(guò)replica.lag.time.max.ms。
Unclean領(lǐng)導(dǎo)者選舉:
不在ISR集合中的存活副本可以參與領(lǐng)導(dǎo)者選舉枕扫。
2. 消費(fèi)者組重平衡
觸發(fā)條件:
- 組成員數(shù)量發(fā)生變化
- 訂閱主題數(shù)量發(fā)生變化
- 訂閱主題的分區(qū)數(shù)發(fā)生變化
重平衡通知:
通過(guò)心跳線程陪腌。
消費(fèi)者組狀態(tài)機(jī):
Empty/Dead/PreparingRebalance/CompletingRebalance/Stable
消費(fèi)者端重平衡:
JoinGroup和SyncGroup。
Broker端重平衡場(chǎng)景剖析:
新成員加入組烟瞧、組成員主動(dòng)離組诗鸭、組成員崩潰離組、組成員提交位移参滴。
3. Kafka控制器
作用:
在Apache Zookeeper的幫助下管理和協(xié)調(diào)整個(gè)kafka集群强岸。
選舉方式:
第一個(gè)成功創(chuàng)建/controller節(jié)點(diǎn)的broker。
職責(zé):
- 主題管理(創(chuàng)建砾赔、刪除蝌箍、增加分區(qū))
- 分區(qū)重分配
- Preferred領(lǐng)導(dǎo)者選舉
- 集群成員管理(新增Broker、Broker主動(dòng)關(guān)閉暴心、Broker宕機(jī))
- 數(shù)據(jù)服務(wù)
故障轉(zhuǎn)移:
當(dāng)運(yùn)行中的控制器突然宕機(jī)或意外終止妓盲,Kafka能夠快速的感知到,并立即啟用備用控制器來(lái)代替之前失敗的控制器酷勺。
重建zookeeper的/controller節(jié)點(diǎn)本橙。
4. 高水位
作用:
- 定義消息可見性扳躬,用來(lái)標(biāo)識(shí)分區(qū)下哪些消息可以被消費(fèi)者消費(fèi)脆诉。
- 幫組kafka完成副本同步。
高水位更新機(jī)制:
currentHW = max{currentHW, min(RemoteReplica1-LEO, RemoteReplica2-LEO, ...)}
副本同步機(jī)制:
Leader副本和Follower副本對(duì)應(yīng)的高水位如何更新贷币。