對Kafka的總結

2021-10-06 23:15:54 字數 1715 閱讀 6051

定位: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...