文章作者郵箱:yugongshiye@sina.cn 地址:廣東惠州
▲ 本章節目的
? 掌握Kafka的消息流處理;
? 掌握Kafka的索引機制;
? 掌握Kafka的消息系統語義;
一、Kafka消息流處理
1. Producer 寫入消息
流程說明:
1. producer 要向Kafka生產消息,需要先通過 zookeeper 的 "/brokers/.../state" 節點找到該 partition 的 副本leader的位置信息。
2. producer 將消息發送給該 leader。
3. leader 收到消息后,將消息寫入到分區目錄下的本地 log 文件中。
4. followers 從 leader pull 同步消息,將消息寫入到分區目錄下的 log 中。如果同步成功(將消息寫入log文件成功),則向 leader 返回 ACK(確認機制)。
細節補充:
Kafka引入了一個ISR機制(概念),在Follower和Leader數據同步的過程中,
比如:
①副本-Follower
②副本-Leader
③副本-Follower
在數據同步過程中,①②同步,③出故障沒有跟上。
此時①②是同一組ISR成員,③不是。
如果后續Leader掛掉了,則Kafka會從Leader的ISR組中隨機選擇一個Follower成為Leader。
Kafka底層有一個同步超時的時間(10s),即一個Follower在超時時間內沒有反饋ACK,則人為同步失敗。
由寫入流程可知ISR里面的所有replica都跟上了Leader,只有ISR里面的成員才能選為Leader。對于 f+1 個replica,一個partition可以在容忍 f 個replica失效的情況下保證消息步丟失。
比如:一個分區由5個副本,掛掉4個,剩下一個副本,依然可以工作。
注意:Kafka的選舉不同于zookeeper,用的不是過半選舉。
5. leader 收到所有 ISR 中的 repli