【问题标题】:How many partitions should I create for kafka consumers?我应该为 kafka 消费者创建多少个分区?
【发布时间】:2017-11-14 18:46:45
【问题描述】:

目前我只有一个主题分区和一个消费者。 但是我的消费者运行缓慢,所以我想在同一主题中添加新消费者。

但同时我也希望所有的消费者处理专有的消息集。

我无法确定应该创建多少个分区,以便在我想增加吞吐量和处理独占消息时添加消费者。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    如果一个主题有 N 个分区,则可以启动一个包含 N 个消费者的消费者组,他们每个人都可以在其中一个分区上工作。

    这样,每个消费者将获得一组不同的消息(除非涉及故障转移,否则某些消息可能会多次传递),如果工作负载均匀分布在所有分区中,这将实现负载平衡正确。

    如果您的消费者少于 N 个,其中一些消费者将获得多个分区,但他们仍不会共享分区,并且每个消费者将获得大致相同数量的分区。

    如果您有超过 N 个消费者,一些消费者将保持空闲状态(但可以充当热备用,以防其他消费者退出)。

    这一切的关键在于你将这些消费者放在同一个消费者组中。这是向 Kafka 指示他们应该在它们之间划分分区的方式。如果您改为启动 N 个消费者组,则每个组将并行获取所有消息(每条消息将被处理 N 次)。

    分区的主要缺点是您会丢失消息的总顺序。消息仅相对于同一分区中的其他消息按顺序传递。这对您的应用程序来说可能是也可能不是问题(如果是,您可以通过查看时间戳来重新安排应用程序中的内容)。

    【讨论】:

    • 当我想增加消费者时,是否有增加分区的机制?
    • 并非如此。您应该预先配置足够的分区。拥有比消费者更多的分区不是问题。每个人都会得到一个以上的分区。并且 Kafka 可以动态处理消费者加入和离开——然后它将重新平衡现有分区之间的分区。
    • 如果确实需要,您可以稍后添加分区,但这不会重新分区现有消息。我认为您不能减少分区数量(不会丢失数据)。
    • 消息顺序不是我关心的。我只关心消息的重复和丢失。
    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 2020-10-12
    • 2020-06-03
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    相关资源
    最近更新 更多