1、問題來源
在工作中需要觀察上游生產的數據順序和自己寫的任務處理數據的順序是否一致,嘗嘗需要將kafka中的指定時間或者偏移量開始的數據導出來分析,如果每次都導數據都是從頭開消費導全量,往往少則幾個G多則幾十G的數據,導出容易卡死或者大文件傳輸很慢。
通過詢問deepseek,推薦使用下列方案,然后就去實踐是否可行
2、可選的方案
利用kafka安裝包自帶的./bin/kafka-console-consumer.sh來消費,省去各種找工具的煩惱
1) 根據時間來消費
# 首先重置偏移量
./bin/kafka-consumer-groups.sh --bootstrap-server <broker:port> --group export-test --topic <topic> --reset-offsets --to-datetime "2025-05-23T01:30:00.000" --execute
# 然后正常消費
./bin/kafka-console-consumer.sh --bootstrap-server <broker:port> --topic <topic> --group export-test > t.json
2) 根據偏移量來消費
./bin/kafka-console-consumer.sh --bootstrap-server <broker:port> --topic <topic> \
--partition <partition_number> --offset <offset_number> > t.json
注意:必須同時指定分區號才能使用?--offset
?參數
3、最終方案
通過實踐,采用根據時間來消費的方式,理由如下
1) 指定時間點的偏移量不好獲取,需要多次嘗試才能確定,浪費時間
2) 根據偏移量的方案需要指定分區號,多個分區的情況下需要重復好幾遍,而且相同時間點在每個分區中中的偏移量不一致
3) 導出的數據中不含偏移量,每次重復定位很難精確,耗時耗力
采用根據時間來消費的方式需要注意的點
1) 執行第一步重置偏移量時指定的時間為標準UTC時區,北京時間為UTC+8(東八區),中國地區如果需要獲取2025-05-23:09:30:00開始的消息,需要將--to-datetime 的時間設置為2025-05-23:01:30:00
2) 在執行命令中指定的消費者組名稱千萬不能和生產中使用的消費者組一樣,也就是--group 后面的名稱需使用測試的名稱
3) 重置偏移量和后面的正常消費指定的的消費者組需一致
4、檢查導出的消息是否準確
通過vim t.json查看導出的消息是否為預期的時間范圍