數據是系統的燃料,系統的效率高低很大程度取決於數據流轉是否及時: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。