Kafka 中的“__consumer_offsets”主题是什么

问题描述 投票:0回答:4

当我运行此命令时,我得到 2 个主题。我知道我创建了测试主题,但我看到了一个名为“__consumer_offsets”的附加主题。 从名字上就暗示它与消费者抵消有关,但它是如何使用的呢?

$ bin/kafka-topics.sh --list --zookeeper localhost:2181
__consumer_offsets
test

$ bin/kafka-topics.sh --describe --zookeeper localhost:2181
Topic:__consumer_offsets        PartitionCount:50       ReplicationFactor:1     Configs:segment.bytes=104857600,cleanup.policy=compact,compression.type=producer
        Topic: __consumer_offsets       Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: __consumer_offsets       Partition: 1    Leader: 0       Replicas: 0     Isr: 0
                      *
                      *
                      *
        Topic: __consumer_offsets       Partition: 48    Leader: 0       Replicas: 0     Isr: 0
        Topic: __consumer_offsets       Partition: 49    Leader: 0       Replicas: 0     Isr: 0

这发生在 Kafka 1.1.0 中以及为什么有 50 个分区。 还在寻找一种方法来禁用此功能,因为每次我尝试运行“描述”主题时,它首先打印 __consumer_offsets 的 50 个分区,然后打印我的主题。

apache-kafka
4个回答
5
投票

在 Kafka 的初始版本中,偏移量由 Zookeeper 管理,但 Kafka 随着时间的推移不断发展,引入了许多新功能。现在 Kafka 管理内部/系统级主题中的偏移量,即 __consumer_offsets。

每当您创建主题而未明确指定分区数量时,Kafka 最终都会默认为该主题创建 50 个分区。同样的含义也适用于主题 __consumer_offsets。


2
投票

消费者根据消费者组id将最后消费的消息offset id存储在kafka topic

__consumer_offsets
中。
这使得不同的消费者(显然具有不同的消费者ID)能够处理最后消费的消息之后的下一条消息,并避免重复的消息处理。


2
投票

主题

__consumer_offsets
被消费者用来存储他们读取的消息的偏移量。当消费者重新启动时,它可以进行恢复,它将读取它在关闭之前消耗的最后一个位置并处理下一个偏移量。

@cricket_007 是对的,在 Kafka 中默认可以有重复,这是使用的至少一次语义。


0
投票

__consumer_offsets

Kafka 使用自己的压缩内部主题,称为

__consumer_offsets
,它与您的消费者抵消本身直接相关。

如何使用?

Kafka不需要消费者组消费的offset历史记录;它只需要最新的偏移量。通过将偏移量存储在压缩主题中,日志实际上获得了其世界当前状态的更新视图。

示例:想象朋友们一起读书。他们没有在纸上写页码,而是使用笔记本,每个人都在笔记本上写下自己的页码。随着时间的推移,它会变得混乱。与 Kafka 主题类似,其中每个偏移量(页码)都是一个新条目。现在,想象他们使用白板,擦除旧数字并写入新数字。这就像压缩的 Kafka 主题一样,只存储每个消费者组的最新偏移量,从而使检索速度更快

为什么有50个分区。

__consumer_offsets
主题的默认分区计数:50个分区。

计算:Kafka考虑消费主题的总分区(N)。

__consumer_offsets
主题的分区计数为:

partition_count = max(N, 50)
© www.soinside.com 2019 - 2024. All rights reserved.