kafka系列 高階篇之訊息和offset儲存

2021-08-27 06:00:11 字數 3212 閱讀 6730

kafka具有儲存功能,預設儲存資料時間為7天或者大小1g,也就是說kafka broker上的資料超7天或者1g,就會被清理掉。這些資料存放在broker伺服器上,以log檔案的形式存在。

我新增了乙個topic名字為demo1。為了方便觀察,它只有乙個分割槽,乙個副本。

通過producer推送了11條資料

log的路徑配置在conf/server.properties配置檔案中,我的日誌路徑配置在log1資料夾下。log檔案的命名那一長串0,是這個日誌檔案的offset位置。當日誌檔案達到時間或者大小的上限時,就會生成下乙個日誌檔案,命名的就是下乙個offset位置了。

log日誌檔案是二進位制檔案,無法通過文字檢視,但是可以通過kafka.tools.dumplogsegments類的方法,可以檢視日誌的內容。

–print-data-log選項,可以顯示日誌檔案中每條訊息推送的內容

另外還有兩個檔案,index檔案存放的是topic的offset,timeindex是存放的是時間戳

日誌每一條訊息的格式如下,不算訊息長度,共有34位元組。因為沒有key,所以『hello world』這一條訊息占用了35個位元組,下一條訊息從position35開始。

offset: 4bytes

position: 4bytes

offset: 8 bytes

message length: 4 bytes

crc: 4 bytes

magic value: 1 byte

attributes: 1 byte

timestamp: 8 bytes (only exists when magic value is greater than zero)

key length : 4 bytes

key: k bytes

value length: 4 bytes

value: v bytes

上面講完了訊息儲存,那麼consumer的offset是怎麼儲存的呢?consumer有兩種訊息方式,一種是存放在broker的日誌目錄中,另一種方式是存放在zookeeper中。兩種存放方式和你使用kafka-console-consumer命令使用的選項有關。如果使用的是bootstrap-server,那麼就存放在broker;如果使用的是–zookeeper那麼就存放在zookeeper。

broker存放offset是kafka從0.9版本開始,提供的新的消費方式。原因是zookeeper來存放,還是有許多弊端,不方便靈活控制,效率不高。

下面使用consumer命令,消費剛才推送的訊息,這裡我消費的是分割槽0中的訊息,offset從5開始。

列印所有的消費組名稱

檢視消費明細,可以看到,我已經訊息到第11條資料了。

下面通過zookeeper的方式消費資料

列印所有的消費組名稱

檢視消費明細,可以看到,我已經訊息到第11條資料了。

當然,我們也可以通過zookeeper client來檢視consumer的offset

通過以上的步驟,可以檢視到訊息的推送到broker的日誌檔案,檢視訊息推送的內容、offset和時間等資訊。另外,可以我們也檢視到訊息端讀取訊息的offset位置。能夠更深入的了解kakfa的工作原理。

可消費訊息數量 訊息佇列之Kafka概念篇

1.基本定義 kafka是乙個分布式的 可分割槽的 可複製的訊息系統。它提供了普通資訊系統的功能,但具有自己獨特的設計 2.底層原理 2 topic與訊息 這樣,訊息就以乙個個id的方式,組織起來。consumer選擇乙個topic,通過id指定從哪個位置開始消費訊息。消費完成之後保留id,下次可以...

漫遊Kafka設計篇之訊息傳輸的事務定義(5)

之前討論了consumer和producer是怎麼工作的,現在來討論一下資料傳輸方面。資料傳輸的事務定義通常有以下三種級別 最多一次 訊息不會被重 送,最多被傳輸一次,但也有可能一次不傳輸。最少一次 訊息不會被漏傳送,最少被傳輸一次,但也有可能被重複傳輸.精確的一次 exactly once 不會漏...

Kafka系列文章之kafka環境搭建

現在最新的版本是2.1.1 將安裝包解壓到指定位置 3.1.修改kafka home config zookeeper.properties,將datadir 修改為自己的data資料夾 3.2.修改kafka home config server.properties,將datadir 修改為自己...