【问题标题】:How Kafka guarantee the messages order while we increase the partitions in runtime?当我们在运行时增加分区时,Kafka 如何保证消息的顺序?
【发布时间】:2021-01-13 16:07:13
【问题描述】:
我是 kafka 的新手,当我阅读 Kafka 文档时,我意识到使用相同 key 提供的消息将被映射到同一个分区以保证顺序。这完全有道理。但是,我想知道如果我们在运行时增加主题分区的数量,具有相同键的新消息是否会像以前一样散列到同一个分区(旧的)?
如果是这样,如果所有消息都提供了键,那么它们都不会映射到新分区怎么办?这对我来说没有意义。
如果不是,那么Kafka如何保证具有相同键的消息的顺序?
【问题讨论】:
标签:
apache-kafka
kafka-topic
kafka-partition
【解决方案1】:
我想知道如果我们在运行时增加主题分区的数量,具有相同键的新消息是否会像以前一样散列到同一个分区(旧的)?
不,新消息将根据新的分区数进行分区。旧消息不会被重新分区。
如果不是,那么Kafka如何保证具有相同键的消息的顺序?
更改分区数时无法保证。当在运行时增加(或减少)分区数量时,排序可以或更好地改变。
因此,如果您依赖数据的排序,则不建议更改已包含数据的主题的分区。你能做的是
- 在让生产者向其发送数据之前,将现有数据复制到具有新分区数的新主题中。
- 在您的生产者中应用自定义分区程序,该分区程序根据键将消息发送到固定分区,并且仅将“新键”发送到新分区。