首页 > 解决方案 > Kafka 如何处理与分区相关的键控消息

问题描述

谁能解释一下:

  1. Kafka实际上如何存储键控消息?分区是否只分配给一个键?我的意思是,分区是否有可能存储具有多个键的消息?
  2. 如果第一个问题的答案是肯定的,那么如果键的数量超过可用的分区怎么办?

我的用例是,我正在考虑将大量船舶数据发送给经纪人并将其存储为ship_id(MMSI,如果你知道的话)作为密钥。问题是,我不知道那时会收到多少船。所以我不能提前定义分区号。

标签: apache-kafkadata-partitioning

解决方案


分区是否可以存储具有多个键的消息?

是的,murmur2 哈希(Kafka 使用的算法),修改主题中的分区数可以得到相同的数字。例如,如果您只有一个分区,那么任何键显然都会进入同一个分区

如果键的数量超过可用的分区怎么办?

哈希是模数,所以它总是被分配一个有效的分区

现在,如果您有一个明确定义的键,则可以保证将消息排序到分区中,因此分区数量的答案实际上归结为单个分区可以处理多少吞吐量,并且没有简短的答案 - 多少数据您在发送吗?一位消费者在“高峰”消费时从一个分区获取数据的速度有多快?进行适当的性能测试,然后在新主题上扩展分区数以处理潜在的未来负载

您还需要考虑“热”/“冷”数据。例如,如果您有 10 个分区映射到 ID 的第一个数字,那么您的所有数据都以偶数开头,那么您最终将有一半的分区为空


推荐阅读