当我运行此命令时,我得到 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 个分区,然后打印我的主题。
在 Kafka 的初始版本中,偏移量由 Zookeeper 管理,但 Kafka 随着时间的推移不断发展,引入了许多新功能。现在 Kafka 管理内部/系统级主题中的偏移量,即 __consumer_offsets。
每当您创建主题而未明确指定分区数量时,Kafka 最终都会默认为该主题创建 50 个分区。同样的含义也适用于主题 __consumer_offsets。
消费者根据消费者组id将最后消费的消息offset id存储在kafka topic
__consumer_offsets
中。主题
__consumer_offsets
被消费者用来存储他们读取的消息的偏移量。当消费者重新启动时,它可以进行恢复,它将读取它在关闭之前消耗的最后一个位置并处理下一个偏移量。
@cricket_007 是对的,在 Kafka 中默认可以有重复,这是使用的至少一次语义。
__consumer_offsets
Kafka 使用自己的压缩内部主题,称为
__consumer_offsets
,它与您的消费者抵消本身直接相关。
如何使用?
Kafka不需要消费者组消费的offset历史记录;它只需要最新的偏移量。通过将偏移量存储在压缩主题中,日志实际上获得了其世界当前状态的更新视图。
示例:想象朋友们一起读书。他们没有在纸上写页码,而是使用笔记本,每个人都在笔记本上写下自己的页码。随着时间的推移,它会变得混乱。与 Kafka 主题类似,其中每个偏移量(页码)都是一个新条目。现在,想象他们使用白板,擦除旧数字并写入新数字。这就像压缩的 Kafka 主题一样,只存储每个消费者组的最新偏移量,从而使检索速度更快
为什么有50个分区。
__consumer_offsets
主题的默认分区计数:50个分区。
计算:Kafka考虑消费主题的总分区(N)。
__consumer_offsets
主题的分区计数为:
partition_count = max(N, 50)