一、消息隊列概述
消息隊列
應用場景
- MQ消息通道:異步解耦、削峰填谷、釋出訂閱、高可用
- EventBridge資料總線
- 事件源:将雲服務、自定義應用、SaaS應用等應用程式産生的事件消息釋出到事件集
- 事件集:存儲接收到的事件消息,根據事件規則将消息路由到事件目标
- 事件目标:消費事件消息
- Data Platfrom 資料流平台
- 提供批/流資料處理能力
- 各類元件提供各類Connect
- 提供Streaming/Function能力
- 根據資料schema靈活的進行資料預處理能力
二、Kafka詳解
Kafka架構介紹
Zookeeper
- 選舉機制:Paxos機制
- 提供一緻性:寫入強一緻性、讀取會話一緻性
- 提供可用性:一半以上節點存活即可讀寫
- 提供功能:watch機制、持久/臨時節點能力
Borker
- 若幹個Broker節點組成Kafka叢集
- Broker作為消息的接受子產品,使用React網絡模型進行消息資料的接受
- Broker作為消息的持久化子產品,進行消息的副本複制以及持久化
- Broker作為高可用子產品,通過副本間的Failover進行高可用保證
Controller選舉
- Broker啟動會嘗試去zk中注冊controller節點
- 注冊上controller節點的broker即為controller
- 其餘broker會watch controller節點,節點出現異常進行重新注冊
Controller的作用
- Broker重新開機/當機時,負責副本的Failover操作
- Topic建立/删除時,負責Topic meta資訊廣播
- 叢集擴縮容時,進行狀态控制
- Partition/Replica 狀态機維護
Coordinator
- 負責topic-partition與consumer的負載均衡
- 根據不同的場景提供不同的配置設定政策
Kafka高可用
kafka副本ISR機制
- AR:已經配置設定的所有副本
- OSR:很久沒有同步資料的副本
- ISR:一直在同步資料的副本
kafka寫入Ack機制
- Ack=1:leader副本寫入成功,priducer即認為寫成功
- Ack=0:producer發送後即為成功
- Ack=-1:ISR中所有的副本都成功,producer才認為寫成功
kafka副本同步
- LEO:日志最末尾的資料
- HW:ISR中最小的LEO作為HW,HW的消息為Consumer可見的消息
kafka副本選舉
- Clean選舉:優先選取lsr中的副本為leader,如果lsr中無可用副本,則partition不可用
- Unclean選舉:優先選取lsr中的副本為leader,如果lsr中無可用副本,則選擇其他存活副本