2

我想使用时间戳获取偏移量,并尝试使用 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:

这个工具是如何工作的?

4

1 回答 1

2

Kafka 将其日志存储在“日志段”中。这些在配置中设置:

# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=1073741824

kafka.tools.GetOffsetShell 匹配日志段的时间戳,而不是它自己的偏移量的时间戳。

因此,每个日志段的大小为 1073.74 兆字节(默认)。因此,如果您历史记录中的消息总计超过 3,222 兆字节,您将能够通过时间戳查询 4 ​​个不同的日志段。

这就是为什么:

kafka-run-class.sh kafka.tools.GetOffsetShell \
  --broker-list ka1:9092 \
  --time 1430742921000 \
  --topic test_topic \
  --offsets 100 \
  --partitions 61

你被退回了:

test_topic:61:

当您在时间线上查询任何日志段之前的时间戳时,因为工具将日志段的最后修改日期与提供的时间戳相匹配。

我通过创建一个测量日志文件大小的测试并在创建每个新日志后查询时间戳来发现这一点。

于 2015-08-07T11:19:47.077 回答