簡體   English   中英

Kafkacat 在計算記錄時在時間戳之間消耗給出錯誤的結果

[英]Kafkacat consume between timestamp giving wrong results when counting records

我想計算兩個時間戳之間給定 Kafka 主題中的消息數。 我嘗試使用kafkacat執行此操作,使用以下命令:

# START_DATE = 01.04.2022 02:00:00Z
# END_DATE = 01.04.2022 02:05:00Z
$ kafkacat -C -b broker:9092 -t mytopic -o s@1648778400000 -o e@1648778700000 -p 0 -f '[ts %T] [partition %p] [offset %o] %k\n' -e -c 1

事實上,這與在一個非常相似的問題中作為答案列出的方法相同。

根據kafkacat --help

Consumer options:
  -o <offset>        Offset to start consuming from:
                     beginning | end | stored |
                     <value>  (absolute offset) |
                     -<value> (relative offset from end)
                     s@<value> (timestamp in ms to start at)
                     e@<value> (timestamp in ms to stop at (not included))

相應地,我希望上面的命令給我第一條時間戳大於s@<value>小於e@<value>的記錄。 但是,它反而給了我一個在s@<value>之前具有時間戳的記錄(實際上,它只是給了我分區0中的第一條記錄):

# output of above command
[ts 1648692486141] [partition 0] [offset 2] 643b0013-b3e1-47a5-a9d3-7478c0e91ca4

我是否誤解了消費者選項s@<value>e@<value>

卡夫卡貓版本:

Version 1.5.0 (JSON, librdkafka 1.2.1 builtin.features=gzip,snappy,ssl,sasl,regex,lz4,sasl_gssapi,sasl_plain,sasl_scram,plugins,sasl_oauthbearer)

此外,即使使用s@<value> ,我也會看到一些奇怪的行為。 例如:

kafkacat -C -b broker:9092 -t mytopic -o s@1648778400000 -p 0 -f '[ts %T] [partition %p] [offset %o] %k\n' -e -c 1

據我了解, output 應該是record.timestamp ≥ 1648778400000的第一條記錄。 實際的 output 不同:

[ts 1648692486141] [partition 0] [offset 2] 643b0013-b3e1-47a5-a9d3-7478c0e91ca4

並包含我設置的時間戳之前的時間戳( 31.03.2022 02:08:06Z01.04.2022 02:00:00Z )。

當我使用docker run edenhill/kcat:1.7.1進行測試時,這個 output 是相同的(上面是kafkacat

我認為您不能多次提供-o 因此,您的選擇包括

-o e@1648778700000 -p 0  -c 1

從分區 0 讀取一條消息,該消息小於時間戳 1648778700000


要在時間戳之間正確消費,請找到開始時間戳的偏移量,將它們提交給消費者組,然后使用您的結束時間戳在組中啟動消費者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM