定位:kafka是一款分布式,高吞吐量,基於發布/訂閱的訊息中介軟體。
核心元件:
broker:kafka伺服器,負責訊息的儲存和**。
topic:主題,訊息的類別,kafka按照topic分類訊息。
partition:分割槽,乙個topic可以有多個partition分割槽,topic中的訊息儲存在各個partition上。
offset:偏移量。訊息在kafka訊息檔案中的位置,可以理解為訊息在partition上的偏移量,也是代表該訊息的唯一序號。
producer:訊息的生產者。
consumer:訊息的消費者。
consumer group: 消費組,消費者的分組,每個消費者分組必須要屬於乙個group
zookeeper:配置中心,儲存kafka集群的broker,topic,partition等資訊,另外還負責broker的故障發現,partition的leader選舉,負載均衡等。
kafka的儲存設計:
partition分割槽資料檔案(offset,messagesize,data)
partition中的每條message包含3個屬性,offset表示這個訊息在partition中的偏移量,可以看作每個訊息的訊息順序id。messagesize則是訊息的大小,data為訊息的內容。
資料檔案分段segement(順序讀寫,分段命令,二分查詢)
partition物理上是由多個segement檔案組成,每個segement檔案大小相同,順序讀寫。而且每個segement檔案都是以當前檔案中offset最小的值命名.log,這樣我們查offset訊息時,就可以很快二分查詢定位到這個offset訊息在哪個segement檔案中。
資料檔案索引(分段索引、稀疏儲存)
kafka為每個segement檔案建立了索引檔案,檔名與segement檔名相同.index。但是kafka並沒有給每一條訊息都建立索引,而是採取稀疏索引的方式,每隔一定位元組的資料建立索引,從而避免索引檔案過大,因此可以將索引檔案放入記憶體中。
生產者設計(負載均衡)
由於topic是由多個partition組成,且partition均勻分布在不同的broker上,因此為了有效的利用broker的集群效能,提高吞吐量,producer會通過hash或者隨機等方式將訊息平均傳送到多個partittion上,以實現負載均衡。
批量傳送
批量傳送也是提高吞吐量的重要方式,producer端可以在記憶體中合併多條訊息,以一次請求的方式批量傳送給不同的broker,從而大大減少broker儲存訊息時的io操作,所以也一定程度上影響訊息的實時性,但是換取了更好的吞吐量。
訊息壓縮
消費者設計
consumer group
同一 consumer group 中的多個 consumer 例項,不同時消費同乙個 partition,等效於佇列模 式。partition內訊息是有序的,consumer通過pull方式消費訊息。kafka不刪除已消費的訊息
對於partition,順序讀寫磁碟資料,以時間複雜度o(1)方式提供訊息持久化能力。
kafka知識總結
1 kafka是什麼 類jms訊息佇列,結合jms中的兩種模式,可以有多個消費者主動拉取資料,在jms中只有點對點模式才有消費者主動拉取資料。kafka是乙個生產 消費模型。producer 生產者,只負責資料生產,生產者的 可以整合到任務系統中。資料的分發策略由producer決定,預設是defa...
Kafka核心總結
乙個kafka的message由乙個固定長度的header和乙個變長的訊息體body組成。header部分由乙個位元組的magic 檔案格式 和四個位元組的crc32 用於判斷body訊息體是否正常 構成。當magic的值為1時,會在magic和crc32之間多乙個位元組的資料 attributes...
kafka使用總結
列出所有topics bin kafka topics.sh list zookeeper 10.19.167.11 2181,10.19.167.12 2181,10.19.167.14 2181 bin kafka topics.sh list zookeeper 10.19.167.21 21...