当我们在运行时增加分区时,Kafka 如何保证消息顺序?
How Kafka guarantee the messages order while we increase the partitions in runtime?
我是kafka的新手,当我阅读Kafka doc时,我意识到具有相同密钥的消息将被映射到相同的分区以保证顺序。这完全有道理。但是,我想知道如果我们在运行时增加主题分区的数量,具有相同键的新消息是否会像以前一样散列到相同的分区(旧分区)?
如果是这样,如果所有消息都提供了密钥,那么其中 none 将映射到新分区会怎么样?这对我来说没有意义。
如果不是,那么Kafka如何保证具有相同密钥的消息的顺序?
I'd like to know if we increase the number of topic partitions in runtime, will the new messages with the same key be hashed to the same partition (old one) as before?
不,新邮件将根据新的分区数进行分区。旧消息将不会得到 re-partitioned.
If not, then how Kafka guarantee the order to messages with the same key in order?
更改分区数时无法保证。当在运行时增加(或减少)分区数量时,排序可以或更好地改变。
因此,如果您依赖于数据排序,则不建议更改已包含数据的主题的分区。你能做的是
- 在让生产者向其发送数据之前,将现有数据复制到具有新分区数的新主题中。
- 在您的生产者中应用自定义分区程序,该分区程序根据密钥将消息发送到固定分区,并且只将“新密钥”发送到新分区。
我是kafka的新手,当我阅读Kafka doc时,我意识到具有相同密钥的消息将被映射到相同的分区以保证顺序。这完全有道理。但是,我想知道如果我们在运行时增加主题分区的数量,具有相同键的新消息是否会像以前一样散列到相同的分区(旧分区)?
如果是这样,如果所有消息都提供了密钥,那么其中 none 将映射到新分区会怎么样?这对我来说没有意义。
如果不是,那么Kafka如何保证具有相同密钥的消息的顺序?
I'd like to know if we increase the number of topic partitions in runtime, will the new messages with the same key be hashed to the same partition (old one) as before?
不,新邮件将根据新的分区数进行分区。旧消息将不会得到 re-partitioned.
If not, then how Kafka guarantee the order to messages with the same key in order?
更改分区数时无法保证。当在运行时增加(或减少)分区数量时,排序可以或更好地改变。
因此,如果您依赖于数据排序,则不建议更改已包含数据的主题的分区。你能做的是
- 在让生产者向其发送数据之前,将现有数据复制到具有新分区数的新主题中。
- 在您的生产者中应用自定义分区程序,该分区程序根据密钥将消息发送到固定分区,并且只将“新密钥”发送到新分区。