5

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

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

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

4

1 回答 1

6

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

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

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

更改分区数时无法保证。在运行时增加(或减少)分区数量时,排序可以或更好地改变。

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

  • 在让生产者向其发送数据之前,将现有数据复制到具有新分区数的新主题中。
  • 在您的生产者中应用自定义分区器,该分区器将基于键的消息发送到固定分区,并且只有“新键”发送到新分区。
于 2020-09-28T06:04:53.270 回答