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 修改為自己...