Kafka 核心設計原理

Kafka 核心設計原理

Kafka 設計架構

  1. Message System -> Streaming Platform (但業界現在仍以Message 爲主 )
  2. 特點
    1. 低延遲
    2. 高吞吐
    3. 水平擴展 (支持在線擴展)
    4. 順序性
    5. 多場景 (離線,實時)
  3. 架構:
    1. Producer
    2. Broker
    3. Consumer
    4. Zookeeper (嚴格上說,不屬於Kafka架構,但是爲了支持分佈式集羣,必須使用ZK)
    5. 在這裏插入圖片描述
    6. 在架構設計時,應該保證Consumer的消費能力大於Producer。
    7. Producer在發送數據時,會有一個待發送隊列(在內存中),達到一定數據量後,批量向Broker推送。
  4. Topic & Parition & Segment
    1. Record
      1. Key - Value
      2. Timestamp(流處理中使用)
    2. Topic
      1. 邏輯概念
      2. 發佈 - 訂閱 均基於Topic
    3. Partition
      1. 一個Topic 包含一個或多個Partition
      2. 每個Partition 物理上對應一個文件夾
      3. 均勻分佈在各個Broker上
        注: 數據寫入是Append-Only的。有Paper表明,磁盤的順序訪問速度甚至大於內存的隨機訪問速度。
    4. Segment
      1. Partition可以認爲是文件夾,Segment就可以認爲是文件。
      2. 刪除時,刪除Segment,速度較快。
  5. Producer
    1. 消息發送
      1. 同步
      2. 異步
    2. 消息順序性
      1. Queue
      2. Retry
    3. 消息路由 - Partition
      1. 同一用戶採用同一Key,對Key取Hash,就可保證同一用戶的數據都進同一Partition
  6. Consumer API
    1. Low Level API / Assign (存在種種問題)
      1. 指定Partition
      2. 指定起始消費Offset
      3. 指定消息長度
    2. High Level API / Subscribe
      1. 引入了Consumer Group,解決問題
  7. Consumer Group
    1. 以Partition劃分,任何一個Partition只會被一個Consumer消費
    2. Rebalance

Kafka Rebalance 機制:

  1. 每加入/刪除一個Consumer,就會觸發Revoke
  2. 自治式 Rebalance
  3. 集中式 Rebalance:基於Coordinate

Kafka 高可用原理

  1. CAP 理論:分佈式系統中,一致性、可用性、分區容忍性最多隻可同時滿足兩個
  2. 一般分區容忍性都要求有保障,因此很多時候是在可用性與一致性之間做權衡
  3. 在這裏插入圖片描述
  4. ISR (In-Sync Replicas):
    1. 數據被所有Follower同步後,才Commit
    2. Follower一定時間不同步數據,會被踢除ISR。
    3. 當Follower同步速度提升到一定程度,又會被加入ISR中。
  5. Failover
    1. 舊主掛掉,隨機選新主。
    2. 舊主恢復,不會變成Leader。會將自己最後一次Commit之後的數據全部刪除,再同步。

Kafka Consumer Exactly Once

  1. 兩階段提交
  2. At least once + 下游冪等處理
  3. Offset 更新與數據處理放在同一事務中