Kafka 博文索引

博文索引

Kafka 簡介

數據是系統的燃料,系統的效率高低很大程度取決於數據流轉是否及時:html

  • 將數據從生產源頭移動到分析處理終端,這個過程完成得越快,組織的反應就越敏捷。
  • 移動工具越是簡單易用,花費在數據移動上的精力就越少,開發者就越能專一於核心業務。

Kafka 是一款爲數據整合而生的基於發佈與訂閱的消息系統Messaging System,方便用戶在多系統間實現鬆散耦合的異步數據傳輸。數據庫

Kafka 爲消息提供順序持久化保存,可按需讀取。並經過集羣部署與冗餘副本保障數據安全並提供性能伸縮能力。數組

核心概念

  • 消息message:最基本的數據單元,由字節數組組成。消息能夠有一個可選的鍵key,鍵也是一個字節數組。安全

  • 主題topic:消息經過主題進行分類。主題就比如數據庫的表,或者文件系統裏的文件夾。服務器

  • 分區partition:一個提交日誌,主題能夠被分爲若干個分區。消息以追加的方式寫入分區尾部,而後以先入先出的順序讀取。異步

  • 偏移offset:一個不斷遞增的整數值,在建立消息時指定。同個分區中每一個消息的偏移量都是惟一的。工具

  • 生產者producer:建立消息並將其發佈到一個特定的主題上。性能

  • 消費者consumer:訂閱主題並按照消息生成的順序讀取消息。日誌


消息分區

Kafka 經過分區來實現 數據冗餘可伸縮性:分區能夠分佈在不一樣的服務器上,一個主題能夠橫跨多個服務器,以此來提供比單個服務器更強大的性能。code

要注意,因爲一個主題通常包含幾個分區,所以沒法在整個主題範圍內保證消息的順序。生產者在默認狀況下,會把消息均衡地分佈到主題的全部分區上,而並不關心特定消息會被寫到哪一個分區。

爲了保證消息順序可控,能夠爲同類消息指定相同的鍵,而後生產者會根據鍵的 hashmod 結果選取分區,從而保證具備相同鍵的消息總會被寫到相同的分區上。


消費者組

每一個分區只能被分配給一個消費者,而後消費者會按照消息生成的順序讀取它們。

過程當中,消費者會記錄已讀消息的偏移量,避免重複消費同一條消息。

消息系統中常見的通訊模型有兩種:

  • 消息隊列message queue點對點point to point的排他通訊,每條消息只會被消費一次。
  • 發佈/訂閱pub/sub:相似廣播通訊,每條消息可能會被消費屢次。


爲了同時支持這兩種模式,Kafka 在消費者端引入了 消費者組羣counsumer group這一邏輯概念:

  • 不一樣的消費者組羣之間彼此互不相關,二者消費到的消息是一致的,此時至關於實現了發佈/訂閱模型。
  • 而同個組羣的消費者之間存在互斥關係,每一個消費者只能消費部分數據,此時至關於實現了消息隊列模型。

集羣

一個獨立的 Kafka 服務器被稱爲 broker,其主要職責有兩個:

  • 接收來自生產者的消息,爲消息設置偏移量,並提交消息到磁盤保存。
  • 爲消費者提供服務,對讀取分區的請求做出響應,返回已經提交到磁盤上的消息。

爲保證可用性,broker 以集羣的方式部署。每一個集羣會自動選舉出一個 controller 負責管理工做,包括將分區分配給 broker 和監控 broker。

一個分區從屬於一個 broker,該 broker 被稱爲分區的 leader。

若是分區容許多副本replica,這些副本會分佈在多個 broker 上,此時會發生分區複製replication

這種複製機制爲分區提供了消息冗餘,當 leader 失效時分區會被其餘 broker 接管,相關的消費者和生產者都會重連新的 leader。


優點

  • 系統解耦:異構系統能夠經過 Kafka 進行通訊,減小系統之間協調與開發成本。
  • 模型豐富:經過消費者組的概念,一份數據能夠同時支持不一樣的通訊模型,同可以知足不一樣的應用需求
  • 磁盤存儲:Kafka 會將消息持久化到磁盤,容許消息積壓並保證數據不會丟失,無需擔憂生產與消費速率不匹配的問題。
  • 橫向擴展:Kafka 經過集羣與分區的方式實現了橫向擴展,而且能夠在線對集羣進行擴容。
相關文章
相關標籤/搜索