kafka是Linkedin開源的分佈式發佈-訂閱消息系統(消息隊列)
kafka特點
1 高吞吐率、低延遲,每秒處理幾十萬消息,延遲最低幾毫秒
2 可擴展性,支持動態擴展節點數據
3 持久性與可靠性,數據被持久化磁盤,支持數據多副本防止數據丟失
4 高容錯,允許節點失敗
5 高併發,支持上千個客戶端同時讀寫
架構如圖
kafka:produce
1 向broker發送消息
2 可通過任意一個broker發現其他broker的位置信息
3 消息組成 topic key value timestamp
kafka:broker
1 producer和consumer之間的橋樑
從producer端接收消息,並保存下來
將消息發送給訂閱的consumer
2 可將消息可靠地緩存一段時間
每個消息保存成多副本(默認3)
可設置保存時間(默認時間)
kafka:partition與topic
topic
用戶劃分message的邏輯概念,一個topic可以分佈到不通的broker上
partition
kafka橫向擴展和一切並行化的基礎,每個topic至少分成1個partition
消息在partition中是有編號的,稱爲“offset”
kafka以partition爲單位對消息進行備份(replica),每個partition可以配置至少有1個replica
kafka:consumer
負責從kafka中讀取數據,並進行處理
Consumer group
多個consumer可形成一個group,同時讀取某個topic。
每個consumer讀取一個或多個partition
Consumer position
每個consumer自己維護讀取的位置(offset,一旦掛掉後,重啓可繼續讀取)
kafka架構圖
kafka:服務保證
順序保證
同一個producer發送到單個topic的同一partition的消息是順序的
Consumer按照消息在日誌中的寫入順序讀取消息
Producer產生的數據由Consumer消費
容錯
如果消息的副本數是N,則N-1臺機器宕機後不會導致丟失數據
應用場景 :監控 、消息隊列、站點的用戶活動追蹤 、流處理、