異步io
是內核fd與應用程序直接的關系
io 多路復用
1.檢測io是否就緒
2.read/write
消息隊列kafka:
1.典型應用 :異步處理,系統解耦,流量削峰,日志處理
2.核心原理:kafka體系結構以及讀寫流程
3.具體操作:high level api 以及low level api
Kafka是一個開源的、高性能的,高吞吐的分布式流平臺,又稱為分布式消息隊列中間件
消息隊列特征:順序排序,按照先進先出的方式進行消費
Kafka 消息隊列通過發布-訂閱模式、分區機制、持久化存儲和分布式架構實現高效的消息傳遞與系統解耦,其核心原理可歸納為以下幾個方面:
一、核心架構與組件
- Producer(生產者):負責將消息發布到 Kafka 集群的特定 Topic 中。生產者支持同步和異步發送模式,可通過分區策略(如輪詢、哈希)將消息均勻分配到不同分區,實現負載均衡。
- Broker(代理節點):Kafka 集群中的服務器節點,負責存儲消息、處理讀寫請求。每個 Broker 存儲部分 Topic 分區,通過多節點協同實現水平擴展和高可用性。
- Topic(主題):消息的邏輯分類單元,如“訂單創建”“用戶注冊”等。生產者將消息發送到指定 Topic,消費者通過訂閱 Topic 獲取消息。
- Partition(分區):Topic 的物理存儲單元,每個 Topic 包含一個或多個分區,分散存儲在不同 Broker 節點上。分區是 Kafka 并行處理的最小單位,支持多消費者并行消費,提升吞吐量。
- Consumer(消費者):從 Broker 拉取消息并處理。消費者屬于某個 Consumer Group,同一組內消費者通過負載均衡機制分攤分區消費任務,避免重復處理。
- Zookeeper:負責集群元數據管理(如 Broker 注冊、Leader 選舉)、Consumer Group Rebalance(負載均衡)等協調工作(注:Kafka 2.8+ 版本支持無 Zookeeper 模式)。
二、關鍵實現原理
- 分區機制與并行處理
- 分散存儲:通過分區將 Topic 數據分散到多個 Broker 節點,避免單節點存儲壓力過大。例如,10GB 數據分布在 5 個分區,每個分區存儲 2GB。
- 并行消費:每個分區可被一個消費者獨立消費,多個分區可被多個消費者并行處理,顯著提升吞吐率。
- 順序保證:單個分區內的消息按順序寫入并分配唯一 Offset(偏移量),確保消息有序性,適用于金融交易、日志記錄等需嚴格順序的場景。
- 持久化存儲與高可靠性
- 順序寫入磁盤:Kafka 將消息按順序追加到分區日志文件(.log),利用機械盤順序寫入特性(比隨機寫入快 100 倍以上)提升性能。
- 分段存儲:日志文件劃分為多個 Segment(默認 1GB/個),舊 Segment 定期刪除或歸檔,避免單個文件過大影響查詢效率。
- 副本機制:每個分區配置多個副本(Replication Factor),分布在不同 Broker 節點上。主副本(Leader)處理讀寫請求,從副本(Follower)同步數據,確保單點故障時數據不丟失。
- 異步通信與系統解耦
- 生產者異步發送:生產者發送消息后立即返回,無需等待消費者響應,提升系統響應速度。例如,用戶注冊時發送驗證短信,無需等待短信接口返回,直接將請求寫入隊列即可返回注冊成功。
- 消費者 Pull 模式:消費者主動從 Broker 拉取消息,可根據自身處理能力控制消費速度,避免消息積壓或丟失。
- 解耦性:生產者與消費者無需感知對方存在,僅通過隊列交互。例如,電商系統中訂單系統將消息寫入隊列,支付、物流等系統獨立消費,各模塊可獨立升級或擴展。
- 流量削峰與負載均衡
- 緩沖機制:在突發流量(如秒殺場景)下,消息隊列緩存大量請求,避免后端系統因瞬時壓力過大崩潰。例如,每秒 10 萬筆訂單請求可先存入隊列,再由系統按每秒 1 萬筆的處理能力逐步消費。
- 動態負載均衡:Producer 監聽 Broker 注冊節點(/brokers/ids),實時獲取可用 Broker 列表,通過輪詢或哈希算法將消息分散到不同節點。Consumer Group 內消費者通過 Rebalance 機制動態分配分區,確保負載均衡。
- 消息消費與進度管理
- Offset 管理:消費者需顯式提交 Offset(消費進度)到 Kafka 內部主題(__consumer_offsets),防止消費中途故障導致數據丟失。重啟后,消費者從上次提交的 Offset 繼續消費。
- 消費語義:支持 At Most Once(可能丟失消息)、At Least Once(可能重復消費)兩種語義,滿足不同業務場景需求。
三、數據流程示例
- 生產者發送消息:Producer 通過 Push 模式將消息發送到 Broker 的指定 Topic 分區,消息按順序寫入分區日志文件。
- Broker 存儲與復制:Broker 接收消息后,將消息寫入 Leader 分區,并同步到 Follower 副本(ISR 機制確保數據一致性)。
- 消費者拉取消息:Consumer 通過 Pull 模式從 Broker 拉取消息,根據 Offset 定位消費位置,處理完成后提交新 Offset。
- Zookeeper 協調:管理 Broker 注冊、Topic 分區信息、Consumer Group Rebalance 等元數據,確保集群高可用性和數據一致性。