首页 > 解决方案 > 将分区添加到现有 Kafka 主题对生产者/消费者行为的影响

问题描述

当一个新的分区被添加到一个现有的主题时,生产者和消费者如何适应这种变化,以及将新分区分配给代理的策略是什么?

标签: apache-kafka

解决方案


对于生产者

生产者相当无缝地适应分区的添加。

假设您目前有 5 个分区,并且您决定再添加 2 个分区 - 如果您的生产者正在为以下分区生成数据:

  1. 循环方式,然后它现在会将您的消息循环到 7 个分区而不是 5 个。
  2. 键控方式(即具有相同键的消息最终在同一分区中),然后键到分区的映射将调整。

对于消费者

另一方面,消费者可能不适应,确切的行为将在很大程度上取决于消费者在消费者群体中的实际设置。

让我们使用与上面相同的示例,即具有 5 个分区的主题,并且您要再添加 2 个分区,您的消费者

  1. Adapt,如果您的消费者的功能是通用的并且在语义上不依赖于任何特定的键,例如:
    • 如果您使用的是RoundRobinAssignor并且每个消费者都可以从任何分区自由消费
    • 如果您使用的是 FailoverAssignor(如本文所述)并且组中只有一个使用者会主动使用
    • 可能还有更多这样的场景……
  2. 不适应,如果您的消费者实例的功能在很大程度上依赖于传入消息的键,即消费者实例必须仅使用某个键来消费消息。对于此类主题,强烈建议在创建时设置分区,避免以后调整大小(参考:Kafka权威指南-第9章管理Kafka->主题操作->添加分区)。

我只是试图用上面的例子来支持解释,但可能还有更多的场景。

希望这可以帮助!


推荐阅读