我是Kafka的新手,当我阅读Kafka文档时,我意识到使用相同密钥提供的消息将被Map到相同的分区以保证顺序。这完全有道理。但是,我想知道,如果我们在运行时增加主题分区的数量,具有相同密钥的新消息是否会像以前一样散列到相同的分区(旧分区)?
如果是这样,那么如果所有消息都提供了密钥,那么它们都不会Map到新分区呢?这对我来说毫无意义。
如果没有,那么Kafka如何保证消息的顺序以相同的键排列?
我是Kafka的新手,当我阅读Kafka文档时,我意识到使用相同密钥提供的消息将被Map到相同的分区以保证顺序。这完全有道理。但是,我想知道,如果我们在运行时增加主题分区的数量,具有相同密钥的新消息是否会像以前一样散列到相同的分区(旧分区)?
如果是这样,那么如果所有消息都提供了密钥,那么它们都不会Map到新分区呢?这对我来说毫无意义。
如果没有,那么Kafka如何保证消息的顺序以相同的键排列?
1条答案
按热度按时间bejyjqdl1#
我想知道如果我们在运行时增加主题分区的数量,是否会像以前一样将具有相同密钥的新消息散列到相同的分区(旧分区)?
不,新消息将基于新的分区数进行分区。旧消息不会被重新分区。
如果没有,那么Kafka如何保证消息的顺序以相同的键排列?
更改分区数时没有任何保证。在运行时增加(或减少)分区数时,顺序可以改变,或者更好。
因此,如果您依赖于数据的排序,则不建议更改已包含数据的主题的分区。你能做的就是
将现有数据复制到具有新分区数的新主题中,然后再让生产者向其发送数据。
在producer中应用一个自定义分区器,它将基于密钥的消息发送到一个固定分区,并且只将“新密钥”发送到新分区。