【问题标题】:what is this topic "__consumer_offsets" in KafkaKafka 中的“__consumer_offsets”主题是什么
【发布时间】:2019-05-14 04:07:04
【问题描述】:

当我运行这个命令时,我得到 2 个主题。我知道我创建了测试主题,但我看到了一个名为“__consumer_offsets”的附加主题。 顾名思义就是和消费者的offset有关,但是具体是怎么使用的呢?

$ 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


【解决方案1】:

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

每当您创建一个主题而没有明确指定分区数时,Kafka 最终会默认为该主题创建 50 个分区。同样暗示主题__consumer_offsets。

【讨论】:

    【解决方案2】:

    消费者根据消费者组ID将上次消费的消息偏移ID存储在kafka主题__consumer_offsets中。
    这使得不同的消费者(显然具有不同的消费者 id)能够处理最后一条消费消息之后的下一条消息,避免重复消息处理。

    【讨论】:

    • 知道为什么有 50 个分区
    • 分区数由Kafka配置中的offsets.topic.num.partitions选项决定。 50 是默认值,但您可以更改它。
    • 我不会说“避免重复”,因为默认情况下,您仍然至少会获得一次交付,并且如果在处理后未提交偏移量,您将获得重复...而不是偏移量主要存储用于恢复/检查点
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 1970-01-01
      • 2019-07-07
      • 2018-04-23
      • 1970-01-01
      • 2016-02-28
      • 2016-07-01
      相关资源
      最近更新 更多