apache-kafka - Kafka 如何处理与分区相关的键控消息
问题描述
谁能解释一下:
- Kafka实际上如何存储键控消息?分区是否只分配给一个键?我的意思是,分区是否有可能存储具有多个键的消息?
- 如果第一个问题的答案是肯定的,那么如果键的数量超过可用的分区怎么办?
我的用例是,我正在考虑将大量船舶数据发送给经纪人并将其存储为ship_id
(MMSI,如果你知道的话)作为密钥。问题是,我不知道那时会收到多少船。所以我不能提前定义分区号。
解决方案
分区是否可以存储具有多个键的消息?
是的,murmur2 哈希(Kafka 使用的算法),修改主题中的分区数可以得到相同的数字。例如,如果您只有一个分区,那么任何键显然都会进入同一个分区
如果键的数量超过可用的分区怎么办?
哈希是模数,所以它总是被分配一个有效的分区
现在,如果您有一个明确定义的键,则可以保证将消息排序到分区中,因此分区数量的答案实际上归结为单个分区可以处理多少吞吐量,并且没有简短的答案 - 多少数据您在发送吗?一位消费者在“高峰”消费时从一个分区获取数据的速度有多快?进行适当的性能测试,然后在新主题上扩展分区数以处理潜在的未来负载
您还需要考虑“热”/“冷”数据。例如,如果您有 10 个分区映射到 ID 的第一个数字,那么您的所有数据都以偶数开头,那么您最终将有一半的分区为空
推荐阅读
- c++11 - cgo 不包括 CXXFLAGS
- mysql - 直接模式下的 Sqoop 错误
- c++ - 使用 std::hex 将十六进制转换为十进制
- python - python将“unicode”转换为列表
- php - Symfony4:将服务注入控制器__construct(构造函数)
- google-bigquery - BigQuery - UNION ALL 的类型不兼容? - 使我抓狂
- r - 在 R 的 geosphere 包中,为什么轴承不在 0-360 度?
- json - 在 json 中创建一个具有真或假响应的 ping
- python - 广播 - 给定矩阵基础的 3D 系数场到矩阵的 3D 场
- github - 为什么 GitHub 继续推送 Pipfile 中使用的不同版本?