向现有 Kafka 主题添加分区对生产者/消费者行为的影响

bre*_*sai 0 apache-kafka

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

小智 5

对于生产者

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

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

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

对于消费者

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

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

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

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

希望这可以帮助!