【发布时间】:2018-09-30 14:26:36
【问题描述】:
据我了解,如果我在其中一个主题中使用键控消息,kafka 分区器将始终将具有相同键的消息发送到同一分区,这将确保该特定消息集的顺序。
此外,默认分区程序最初会根据该特定主题可用的分区数来决定将消息发送到哪个分区。类似于 messageKeyHash % numberOfPartitions。
我的问题是,如果我有一个包含 5 个分区 的主题,并发送 3 条消息 具有 key A 并且它们是全部分配给 partition 0,然后我 将该主题的分区数从 5 增加到 5+x,kafka 会“记住”带有键 A 的消息应该去partition 0 还是partitioner 可以用key A 向另一个partition 发送消息?
换句话说:如果我在运行时增加一个主题的分区数量,我是否会失去该主题中特定键的排序保证?
如果是,我该如何解决这个问题?如果我需要订购保证,应该总是过度分区吗?我应该实现自定义分区器吗(我不知道如何实现)?
谢谢
【问题讨论】:
标签: apache-kafka