由 kafka-consumer-groups 设置为最早时的当前偏移行为?

Cur*_*ind 4 apache-kafka

我有一个有 25 个分区的 kafka 主题,集群已经运行了 5 个月。

根据我对给定主题的每个分区的理解,偏移量从 0,1,2...(无界)开始

我看到 log-end-offset 的值非常高(现在 -> 1230628032)

我创建了一个新的消费者组,偏移量设置为最早;所以我预计该消费者组的客户端将从偏移量 0 开始的偏移量。

我用来创建一个偏移到最早的新消费者组的命令:

kafka-consumer-groups  --bootstrap-server <IP_address>:9092 --reset-offsets --to-earliest --topic some-topic --group to-earliest-cons --execute
Run Code Online (Sandbox Code Playgroud)

我看到正在创建的消费者组。我预计当前偏移为 0;然而,当我描述消费者群体时,当前的偏移量非常高,目前 --> 1143755193。

设置的记录保留期为 7 天(标准值)。

我的问题是为什么我们没有看到来自这个消费者组的消费者将读取 0 的第一个偏移量?它与数据保留有关吗?

任何人都可以帮助理解这一点吗?

小智 6

这正是数据保留。Kafka 很可能已经从您的分区中删除了偏移量为 0 的旧消息,因此从 0 开始是没有意义的。相反,Kafka 会将偏移量设置为您分区上最早的可用消息。您可以使用以下方法检查这些偏移量:

./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list <IP_address>:9092 --topic some-topic --time -2
Run Code Online (Sandbox Code Playgroud)

您可能会看到非常接近您所看到的新消费者抵消的值。

您还可以尝试将偏移显式设置为 0:

./kafka-consumer-groups.sh  --bootstrap-server <IP_address>:9092 --reset-offsets --to-offset 0 --topic some-topic --group to-earliest-cons --execute
Run Code Online (Sandbox Code Playgroud)

但是,您将看到偏移 0 不存在的警告,它将使用更高的值(上述最早的可用消息)

New offset (0) is lower than earliest offset for topic partition some-topic. Value will be set to 1143755193
Run Code Online (Sandbox Code Playgroud)