kafka 系列 -- 一、基本概念

前言

思考的過程每每比直接獲得結論更加劇要架構

kafka 應用場景

  1. 應用監控
  2. 網站用戶行爲追蹤
  3. 流數據
  4. 持久性日誌

基本概念

在說基本概念前,先看一下 kafka 的系統架構
image.png網站

  1. Broker
    通常而言,一臺機器就是一個 broker,固然 1 臺機器上能夠部署多個 broker
  2. Producer
    消息的生產者
  3. Consumer
    消息的消費者
  4. Consumer Group
    消費者組,組內能夠有多個消費者,共享同一個 groupid。消費組內的消費者,通常狀況下爲同一個消費者部署多個實例。
  5. Topic
    topic 在 kafka 中是一個邏輯上的概念,用於將 partition 分類。1 個 topic 有多個 partition。生產者將消息發送到指定的 topic 中,消費者從指定的 topic 進行消費。
  6. partition
    一個可追加的日誌存儲文件。kafka 的分區能夠分佈在不一樣的 broker 上
  7. 多副本機制
    kafka 爲 partition 引入了多副本機制,能夠經過增長副本數量來提高容災能力。同一分區中的不一樣副本保存相同的消息。副本之間通常是 一主多從。以下圖,每一個分區有 3 個副本image.pngspa

    1. AR
      集羣中的副本,統稱 AR(Assigned Replication),AR = ISR + OSR
    2. ISR
      與 leader 副本保持必定同步的副本,稱爲 ISR(in-sync-replication)。消息需先發送到 leader 副本,follower 才能從 leader 副本中拉取消息
    3. OSR
      與 leader 副本同步滯後過多的副本,稱爲 OSR(out-sync-replication)。
    4. leader 副本
      leader 副本負責維護 follower 副本的狀態,當 ISR 副本中滯後 leader 副本過多,會被移除到 OSR 副本中。當 OSR 副本跟上了 leader 副本,會被移動到 ISR 副本。只有在 ISR 集合的副本,纔有機會選舉 leader
    5. HW、LEO
      HW(Hight Watermark)俗稱高水位,標識一個特定的偏移量,消費者只能拉取該偏移量以前的消息
      LEO(Low End Offset)日誌最後偏移量。標識日誌文件中待寫入消息的偏移量
    6. 關係圖
      圖 2: HW、LEO 的關係
      image.png
      圖 3 - 圖4: leader 副本、follower、HW、LEO 關係
      image.png
      消息寫入以後,LEO 變成5,follower,會從 leader 中拉取消息,進行同步
      image.png
      當 ISR 集合的副本都寫入 3 後,HW 就會變成 4,表示 0-3 的消息爲可消費
      image.png
      當 ISR 集合都寫入 3 、4 以後,HW、LEO 值都變成 5
      image.png
    7. 總結
      kafka 消息的寫入,是可靠性和可用性的權衡。當 ISR 副本均寫入消息時,不用等待 OSR 副本也寫入消息。這裏避免了 OSR 滯後太多,從而致使不可用性,且消息被寫入到多個副本,也保證了消息的可靠性。
      當 leader 寫入完消息當即掛掉後,ISR 副本因未能同步到消息,從而致使消息丟失。

與 RocketMQ 區別

  1. partition 在 RocketMQ 中爲 隊列。消費模型也幾乎一致,基於消費組進行消費
  2. RocketMQ 有自帶的註冊中心,無需 zookeeper。
  3. kafka partition 有多副本機制,RocketMQ 隊列沒有多副本機制
  4. kafka 多副本機制有丟消息問題,RocketMQ 則沒有
  5. 從設計上來看,RocketMQ 與 kafka 的解決的應用場景不同。RocketMQ 注重消息的可靠性,而 kafka 在這一方面比較弱,kafka 更注重系統吞吐量。所以 kafka 不適合要求消息不能丟的場景。
相關文章
相關標籤/搜索