[英]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:06Z
與01.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.