Kafka 分区不匹配 MurmurHash2 32 位算法

问题描述 投票:0回答:1

我正在研究灾难恢复功能,我需要确定给定密钥的 Kafka 分区以便重播来自该分区的消息。我读过,如果向卡夫卡提供密钥,它将使用

murmur2(key) % numOfPartitions
但是这似乎不是实施中发生的事情。

这是一张包含 keys 的表格,murmur2(key) % numOfParitions结果,以及实际分区 的内容。

钥匙 杂音2 % 3 实际分区
AF42CC55DFC84DBC881743CEC2733A22 1 2
209BFB14708147319571502816D3D100 0 0
5A8DE05847404D1DA856EF8E35AE3830 2 1

主题有 3 个分区,我正在使用这个在线 murmurhash2 32 位算法:http://murmurhash.shorelabs.com/

注意第 1 个和第 3 个键的差异 - 实际分区与计算的散列分区不匹配。

这篇文章说

DefaultPartitioner 是一个分区器,它使用 32 位 murmur2 哈希计算记录的分区(定义了键)或以循环方式选择分区(根据主题的可用分区)。

知道为什么密钥

AF42CC55DFC84DBC881743CEC2733A22
5A8DE05847404D1DA856EF8E35AE3830
没有存储在 murmur2 散列分区中吗?

apache-kafka kafka-producer-api kafka-partition
1个回答
1
投票

密钥的字节(假设是 StringSerializer,然后是 UTF8 字符串,使用默认的 Kafka 编码)被散列。你用过的在线工具,好像是用ASCII

或者,作为备份解决方案的一部分,您可以将分区号直接存储为数字。那么该路径下的所有数据都是准确的。此外,它会阻止您计算哈希值、确定主题实际有多少个分区,并且能够不依赖于默认行为,因为生产者可以轻松覆盖它。

© www.soinside.com 2019 - 2024. All rights reserved.