天天看點

概要梳理kafka知識點

主要是梳理一下kafka學習中的一些注意點,按照消息的流動方向進行梳理.詳細的kafka介紹推薦看 騎着龍的羊 的系列部落格,具體的某一塊的知識點,可以參考我給出的一些參考文章.

1. kafka在系統中的地位

Kafka是由Apache軟體基金會開發的一個開源流處理平台,由Scala和Java編寫。Kafka是一種高吞吐量的分布式釋出訂閱消息系統,它可以處理消費者規模的網站中的所有動作流資料。 這種動作(網頁浏覽,搜尋和其他使用者的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些資料通常是由于吞吐量的要求而通過處理日志和日志聚合來解決。 對于像Hadoop的一樣的日志資料和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的并行加載機制來統一線上和離線的消息處理,也是為了通過叢集來提供實時的消息。

詳細參考文章

2. kafka基本原理

(1) kafka系統資料流圖

a) productor發送資料到broker
    b) broker确定消息的存儲路由,找到對應的topic,并根據配置設定算法,存儲到對應的partition中
    c) consumer訂閱topic, 讀取消息時,根據不同本group對應不同partition的不同offset,擷取對應的消息           
概要梳理kafka知識點

3. kafka資料流入處理

(1) 在發送一條消息時,可以指定這條消息的key,broker根據這個key和partition機制來判斷将這條消息發送到哪個parition。(每個parition都會有個序号)

參考文章

(2) 每個partition都有若幹個server,其中隻有一個作為leader,持有所有對該partition的讀寫請求.其他最為follower,當leader出現問題是,從所有follower中選一個作為leader,保證該partition正常被讀寫.(這裡的server是指kafka的broker)

詳細介紹

4. kafka資料存儲處理

(1) 消息在kafka中是順序存儲在partition中的,partition是實體概念,在作業系統中是以檔案夾的形式儲存的,命名格式是{topicName}-{partitionId},partition的ID是從0開始編号的.檔案夾的組織格式詳細介紹

(2) partition的資料結構類似于隊列,先進先出,消息的唯一标示是在partition中的偏移量(offset),(功能類似于作業系統中的偏移量).在新版本的kafka中,offset是有consumer維持,consumer可以選擇訂閱最新消息,也可以從最開始訂閱消息.consumer也可以通過改變offset重複讀消息.

(3) offset是儲存在一個topic下的,該topic的名稱為__consumer_offsets,它有50個partition,标号0-49,以消費的Group,Topic,以及Partition做為組合 Key,利用這個組合key唯一确定offset的存儲位置.kafka在記憶體中保持了__consumer_offsets的内容,加速offset的讀取.

參考連結

(4) kafka的一個特性就是能夠有效保持message,它把message儲存在檔案中,同時也可以通過設定檔案的儲存時間或者檔案的最大容量來有計劃的删除過期消息.

5. kafka資料流出處理

(1) consumer訂閱topic,實際上訂閱的是topic的partition

(2) 消息被均勻儲存在一個topic的多個partition中

(3) consumer訂閱partition, 受限于自己所在的group,如果consumer所在的group中,有别的consumer訂閱了該partition,那麼這個consumer就不能訂閱該partition.這似乎是沖突的,似乎這個consumer就不可能完整訂閱topic的所有message了.實際上,可以把一個group中所有consumer看成邏輯上的消費者的多個子消費者,這些子消費者采用并發的存在形式進而加速邏輯消費者的消息消費速度.

(4)

詳細介紹文章

6. kafka資料備份