Zookeeper/Kafka 如何为消费者保留偏移量?

yog*_*ear 5 apache-kafka kafka-consumer-api

偏移量是主题/分区的属性,还是消费者的属性?

如果它是消费者的属性,那是否意味着从同一分区读取的多个消费者可能具有不同的偏移量?

此外,如果消费者出现故障,它会发生什么情况,Kafka 如何知道它在重新上线时正在与同一个消费者打交道?大概会生成一个新的客户端 ID,因此它不会具有与以前相同的 ID。

Jak*_*kub 6

在大多数情况下,它是消费者组的属性。写消费者的时候,一般会在group.id参数中指定消费者组。该组 ID 用于恢复/存储来自 / 在特殊主题__consumer_offsets中的最新偏移量,它直接存储在它自己的 Kafka 集群中。消费者组不仅用于偏移量,还用于确保每个分区仅从每个消费者组的单个客户端消费。

然而,Kafka 为您提供了很大的灵活性 - 因此,如果您需要,您可以将偏移量存储在其他地方,并且您可以根据您想要的任何标准进行操作。但是在大多数情况下,遵循消费者组概念并将偏移量存储在 Kafka 中是您能做的最好的事情。

  • 是的,偏移量使用基本上是“消费者组 - 主题 - 分区”的键存储在那里。该主题被压缩,因此它始终尝试仅保留最新消息并删除具有相同密钥的旧消息。压缩并不意味着总是只有一条消息具有给定的键,但是当新客户端启动时,它将始终使用给定键的最后一个偏移量,因此这不是问题。关于日志压缩的更多信息在这里:http://kafka.apache.org/documentation/#compaction (2认同)