当我们在运行时增加分区时,Kafka如何保证消息的顺序?

inj*_*joy 7 apache-kafka kafka-topic kafka-partition

我是 kafka 的新手,当我阅读 Kafka 文档时,我意识到使用相同密钥提供的消息将被映射到相同的分区以保证顺序。这完全有道理。但是,我想知道如果我们在运行时增加主题分区的数量,具有相同键的新消息是否会像以前一样散列到同一分区(旧分区)?

如果是这样,如果所有消息都提供了键,那么它们都不会映射到新分区怎么办?这对我来说没有意义。

如果不是,那么Kafka如何保证具有相同key的消息的顺序呢?

mik*_*ike 9

我想知道如果我们在运行时增加主题分区的数量,具有相同键的新消息是否会像以前一样散列到同一分区(旧分区)?

不,新消息将根据新的分区数进行分区。旧消息不会被重新分区。

如果不是,那么Kafka如何保证具有相同key的消息的顺序呢?

更改分区数量时没有任何保证。当在运行时增加分区数量时,顺序可能会改变,或者更好的是会改变。

因此,如果您依赖数据排序,则不建议更改已包含数据的主题的分区。你能做的是

  • 在让生产者向其发送数据之前,将现有数据复制到具有新分区数的新主题中。
  • 在生产者中应用自定义分区器,该分区器根据密钥将消息发送到固定分区,并且仅将“新密钥”发送到新分区。

请记住,不可能减少分区数量。