2017-07-11 67 views
1

我有下面的场景,我有多个大文件(每个大约200M记录),我想通过kafka发送该文件。为了获得更好的性能,我想使用Kafka分区来发送数据。现在我的数据要求是针对特定的密钥,所有的消息都应该传送到特定的分区。目前,对于POC,我使用10个卡夫卡分区,并使用数字ID字段对数据进行分区。我的逻辑只是检查IT的最后一位数字并将记录发送到相应的kafka分区。 EX:ID - ***7将总是进入分区7.现在这个逻辑不能用于推广我的代码,因为密钥可以是非数字的,分区数量可以根据需要增加/减少。在kafka分区中均匀分布数据的分区技术

我想知道是否有一个哈希算法,可以在特定范围内生成值(例如,如果我必须有10个分区,那么它应该创建以0-9结尾的所有哈希值)?

回答

4

是的,你可以简单地使用密钥的哈希码模数分区。但这就是默认分区程序无论如何使用的,所以不妨使用它。

https://github.com/apache/kafka/blob/0.11.0/clients/src/main/java/org/apache/kafka/clients/producer/internals/DefaultPartitioner.java#L69

+0

米哈尔感谢您的评论,我看到有关于DefaultPartitioner非常少的文档。每次通过时都会为同一个密钥生成相同的散列分区号码对? – Explorer

+0

是的,除非您更改分区数量。 –