Kafka 2.0課程 12 Offset控制(重建)

Offset控制(重建資料)

ZONGRU Li
Jan 21, 2020

在學習執行相關指令前,請先確認Server啟動(或參考課程6)

因log檔出問題,這篇重建整個topics

透過刪除以下data目錄下的兩個資料挾:

一個是kafka的server.properties定義的log.dirs 另一個是zookeeper的zookeeper.properties的dataDir 也就是兩者的LOG位置
topic都清空了
重建first_topic這個topic
針對first_topic放入一些訊息並離開
開著group叫my-first-app的consumer console並重開producer傳新訊息讓consumer接收
consumer離開
接著多傳給個訊息後來開producer

確認目前offset狀態

在次進入group為my-first-app的consumer

看到多打的Pig至4

離開再重進

就看不到舊有的訊息了

回到原標題,我想看已經被接收過的訊息該怎麼辦

進行確認group的指令

kafka-consumer-groups

此時會看到該指令的doc文件,其中包含了reset-offsets

其中有

接下來會演示to-earliest跟shift-by指令

將offset拉到最初始訊息的位置

kafka-consumer-groups --bootstrap-server localhost:9092 --group my-first-app --reset-offsets --to-earliest

就出error了! 並提示這需要--execute(執行)

kafka-consumer-groups --bootstrap-server localhost:9092 --group my-first-app --reset-offsets --to-earliest --execute

還是錯,提示說要指定topic或指定全部topic!

所以正確的指令如下

kafka-consumer-groups --bootstrap-server localhost:9092 --group my-first-app --reset-offsets --to-earliest --execute --topic first_topic

正常執行!!

此時次執行這個consumer group時會看到全部舊有的所有訊息!

進入同一個group的consumer console

kafka-console-consumer --bootstrap-server localhost:9092 --topic first_topic --group my-first-app

最初的Hello 1都看到了!

透過指令再次看到group的describe資料

kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group my-first-app

看到LOG-END-OFFSET都跑到最後面了!

接著也嘗試另一個叫shift-by的指令(且指定偏移量2)

kafka-consumer-groups --bootstrap-server localhost:9092 --group my-first-app --reset-offsets --shift-by 2 --execute --topic first_topic

因為我們已經到底了

試著改-2偏移

全部PARTITIONS都往前移2了! 看到PARTITION 1目前NEW-OFFSET有2(即已讀2筆的狀態)

再次進到同一個gorup的consumer console

此時就沒看到Hello 1與Hello 3就是更上圖的PARTITION 1已讀的兩筆

參考課程

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet