1. 程式人生 > >kafka理論學習

kafka理論學習

... 保持 使用 其他 con 負載 暫時 segment 決定

1.kafka
特點:分布式、可分區、可復制 基於文件存儲

獨特的設計:消息被消費和消息被刪除互不幹擾
目的:減少消息被消費後,對文件內容改動的IO開支
消息被刪除只和broker配置的時間有關

producer:向topic發布消息
consumer:預定topics並消費
kafka集群:每個服務叫做broker

broker:
topic:基本單位,消息的歸納
partition區:每個topic被分成多個區,每個區在存儲方面是append log,append log在文件中的位置叫做offset,唯一標示消息
partition目的:避免單個文件過大
leader:分區中消息的讀寫

follower:同步leader,隨時準備接替leader

consumers and consumer group:
隊列模式:每個consumer屬於一個consumer group
發布-訂閱:每個consumer屬於不同的group

guarantees擔保:
發送到partitions中的消息將會按照它接受的順序追加到日誌中
對於消費者而言,他們消費消息的順序和日誌中消息順序一致
如果topic的replicationfactor為N,那麽允許N-1個kafka實例失效

2.設計原理
持久性:1.文件存儲,日誌文件append操作,檢索較小。
2.broker將消息暫時buffer起來,消息個數達到一定閥值,fkush將入磁盤。減小寫入次數

性能:kafka吞吐量 --->網絡IO和磁盤IO
方案:開啟消息壓縮機制

生產者:負載均衡 到達哪個分區算法決定
異步發送:消息buffer起來,批量發送到broker

消費者:向broker發送fetch請求,並告知其獲取消息的offset,此後獲取一定數量的消息
pull or fetch:主動索取,保持主動權
push:JMS 被動獲取

3.消息傳送機制
至少一次
至多一次
恰巧一次
建議:消息重復總比消息丟失好

4.復制備份
leaderr處理讀寫請求,follower保持同步
folower和consumer一樣消費消息,並保存本地日誌中
leader負責跟蹤所有folower狀態,
followers 替代 leader

5.日誌
topic的名稱"my_topic",它有2個patitions,
每個partition在物理存儲層面,有多個log file組成,segmentfile命名規則:"最小offset"."kafka"
日誌的創建策略
日誌的刪除策略
日誌的追加策略

6.分配
zookeeper存儲kafka原信息,並使用zookeeper watch機制發現原信息並作出相應的動作
1)broker註冊:當一個kafka啟動後,首先向zookeeper註冊自己的節點信息,同時當broker和zookeeper斷開連接時,此znode被刪除
格式:/broker/ids/[0...N] -->host:port;
2)broker topic registry:當一個broker啟動時,會向zookeeper註冊自己持有的topic和partitions信息,仍然是一個臨時znode.
格式:: /broker/topics/[topic]/[0...N] 其中[0..N]表示partition索引號.
3) Consumer 信息,id註冊、offset追蹤、區域持有的追蹤

1) Producer端使用zookeeper用來"發現"broker列表,以及和Topic下每個partition leader建立socket連接並發送消息.
2) Broker端使用zookeeper用來註冊broker信息,已經監測partitionleader存活性.
3) Consumer端使用zookeeper用來註冊consumer信息,其中包括consumer消費的partition列表等,同時也用來發現broker列表,並和partition leader建立socket連接,並獲取消息.

集群中的每個服務都會同時扮演兩個角色:作為它所持有的一部分分區的leader,同時作為其他分區的followers,這樣集群就會據有較好的負載均衡。

總結:。。。

kafka理論學習