【问题标题】:Kafka log distribution across consumersKafka 日志跨消费者分布
【发布时间】:2017-07-11 19:49:16
【问题描述】:

apache kafka documentation 提到以下内容:

如果所有消费者实例具有相同的消费者组,那么 记录将有效地在消费者实例上进行负载平衡。

如果所有的消费者实例都有不同的消费者组,那么 每条记录都会广播到所有消费者进程

这让我在考虑分区时有点不清楚,第二个语句是否意味着如果我有多个消费者组,这是否意味着每个组中的每个消费者都将读取所有分区中的所有记录?!!

根据我的拙见,他们在文档中使用的照片仍然与上述不符。

事实上,我正在阅读一篇很棒的文章,kafka in a nutshell,下面引用的陈述与文档中提供的照片更加吻合。

也可以针对给定主题将消费者组织成消费者组 — 组内的每个消费者都从一个唯一的分区中读取数据,并且 组作为一个整体使用来自整个主题的所有消息。如果你 消费者比分区多,那么一些消费者将处于空闲状态 因为它们没有可读取的分区。如果你有更多 分区而不是消费者,那么消费者将收到来自的消息 多个分区。如果您有相同数量的消费者和 分区,每个消费者从一个开始按顺序读取消息 分区。

我希望有人能对上述内容有所了解,并根据 Apache 的官方文档清楚地解释一个场景。

【问题讨论】:

    标签: apache-kafka message-queue


    【解决方案1】:

    这是否意味着每个组中的每个消费者都会读取所有分区中的所有记录?!!

    没有。该语句假定每个组只有一个消费者(如“如果所有消费者实例具有不同的消费者组”所示)。

    所以你的整体理解是正确的。如果您有多个消费者组,则会向每个组发送一次消息。

    【讨论】:

    • 更有意义,我猜这个措辞有点混乱,说'如果每个消费者群体只有一个消费者......'更直观。
    • 因此可以通过使用多个消费者组来实现发布/订阅多播语义,并假设工作负载负载平衡发生在单个消费者组中的消费者之间?
    • 两者都是。措辞并不完美(想打开一个 PR 来改进它?)并且是的多播。您甚至可以为每个消费者组实现一个自定义分区器,以将主题分区分配给组内的消费者(如果您有特殊要求)。
    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2018-10-03
    • 1970-01-01
    • 2019-07-15
    • 2020-09-19
    相关资源
    最近更新 更多