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

时间:2020-06-14 01:42:25

标签: apache-kafka

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

1 个答案:

答案 0 :(得分:2)

对于生产者

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

假设现在您有5个分区,而您决定再添加2个分区-如果您的生产者正在向以下分区中的数据生成数据:

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

对于消费者

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

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

  1. Adapt ,如果使用者的功能是通用的,并且在语义上不依赖于任何特定键,例如:
    • 如果您使用的是RoundRobinAssignor,并且每个使用者都可以从任何分区自由使用
    • 如果您使用的是FailoverAssignor(如this article中所述),并且组中只有一个消费者将积极使用
    • 可能会有更多这样的情况...
  2. 不适应 ,如果使用者实例的功能在很大程度上取决于传入消息的键,即使用者实例必须仅使用特定键使用消息。对于此类主题,强烈建议在创建时设置分区,并避免以后再调整大小(Reference: Kafka Definitive Guide - Chapter 9 Administering Kafka -> Topic Operations -> Adding Partitions)。

我刚刚尝试用以上示例来支持解释,但是可能会有更多场景。

希望这会有所帮助!