【发布时间】:2017-11-16 10:09:16
【问题描述】:
我想使用时间戳获取偏移量,并尝试使用 kafka.tools.GetOffsetShell 命令工具。文件为:https://cwiki.apache.org/confluence/display/KAFKA/System+Tools
我认为这个命令在我们指定的时间戳之前返回最新的 N 个偏移量。但是我尝试了几个命令并感到困惑......
kafka-run-class.sh kafka.tools.GetOffsetShell \
--broker-list ka1:9092 \
--time -1 \
--topic test_topic \
--offsets 100 \
--partitions 61
返回:
test_topic:61:6269917760,6257457002
然后:
kafka-run-class.sh kafka.tools.GetOffsetShell \
--broker-list ka1:9092 \
--time -2 \
--topic test_topic \
--offsets 100 \
--partitions 61
返回:
test_topic:61:6257457002
然后:
kafka-run-class.sh kafka.tools.GetOffsetShell \
--broker-list ka1:9092 \
--time 1430742921000 \
--topic test_topic \
--offsets 100 \
--partitions 61
返回空集!!!
test_topic:61:
这个工具是如何工作的?
【问题讨论】:
-
您的问题解决了吗?我得到了同样的行为并深入了解它。
-
可能是因为GetOffsetShell无法根据插入时间戳得到准确的偏移量。你可以看一下源码,kafka 将数据存储到多个块中,它首先根据时间戳找到块,然后返回该块中的第一条记录。所以如果你的块很大,比如你只有一个块,它会返回这个块的第一条记录....
标签: apache-kafka kafka-consumer-api