【问题标题】:Why kafka 0.8.2 say that each partition is consumed by exactly one consumer in a consumer group为什么 kafka 0.8.2 说每个分区只被一个消费者组中的一个消费者消费
【发布时间】:2016-01-27 10:01:04
【问题描述】:

在 Apache Kafka 0.8.2 办公文档中,section 5.6 DistributionConsumers and Consumer Groups 小节中说

组中的消费者公平地划分分区 可能,每个分区只被一个消费者消费 消费群体。

但我发现在实践中,一个消费者组中的多个消费者可以通过从同一个主题分区发送 FetchRequest 来消费来自单个分区的数据。

在随后的 Consumer Id Registry 小节中

除了 group_id 由所有消费者共享一个 组,每个消费者都被赋予一个瞬态的、唯一的 consumer_id( 形式主机名:uuid)用于识别目的。消费者 ID 是 在以下目录中注册。

/consumers/[group_id]/ids/[consumer_id] --> {"topic1": #streams, ..., "topicN": #streams}(临时节点)

它表示每个消费者都有一个唯一的 ID。但是,我在 zookeeper 中找不到这样的结构。

不知道消费者什么时候开始注册?我使用的客户端库是kakfa-python 0.9.4。

【问题讨论】:

标签: apache-kafka


【解决方案1】:

希望对您有帮助

(1) 关于你的第二个问题。 https://github.com/dpkp/kafka-python/issues/472 还有第38期

它说“协调消费者组支持正在开发中。”

(2) 第一个问题。

它说“这是通过将主题中的分区分配给消费者组中的消费者来实现的,以便每个分区仅由组中的一个消费者消费。”(语句A)。这取决于客户端的实现。这在某些 kafka 客户端中可能不正确。我只是有python和cpp的经验。如果实现了组,则每条消息仅由组中的一个消费者使用。如何在一组中的消费者之间分配分区是不同的。当分区多于消费者时,语句 A 可能是正确的。但也有可能在新分区加入或离开现有组时重新分配分区。在这种情况下,分区A可能会先被消费者A消费,然后被消费者B消费,这是可能的。在某些客户端中,您可以选择分配算法,例如循环等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2017-01-04
    相关资源
    最近更新 更多