我需要在我们拥有的密钥上编写自己的分区程序。看起来我们可以编写自己的自定义分区程序。
从卡夫卡主要网站上他们说
生产者将数据发布到他们选择的主题。制片人是 负责选择分配给哪个分区的记录 在主题内。这可以简单地以循环方式完成 平衡负载或它可以根据一些语义分区来完成 功能(比如基于记录中的某些键)。更多关于使用 在一秒钟内分区!
在我的情况下,给定一个主题,我们将10 partitions
,因此我们希望使用此公式来决定数据应该进入哪个分区。
partition = client_id % MOD 10
这里client_id
将成为关键,它始终是数值,总是长数据类型。如何为kafka生成器编写我们自己的自定义分区器,它可以告诉我应该为client_id
使用哪个分区。
我看到我们必须实现Partitioner
类并在partition
方法中进行一些更改但我不确定如何使用keyBytes
变量来找出分区以上公式为基础。
@Override
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes,
Cluster cluster) {
// TODO Auto-generated method stub
return 0;
}
我正在运行Kafka 0.10.0.0版本。
答案 0 :(得分:1)
keyBytes是要分区的序列化密钥。您可以直接使用' key'(使用对象类型)来执行分区。
答案 1 :(得分:0)
如果您指定了密钥(即它不是空的)而不是分区程序,那么Kafka将完全按照您的意图执行。
以下是本书摘录"卡夫卡:权威指南"由O' Reilly Media撰写:
如果存在密钥并使用默认分区程序,Kafka将对密钥进行哈希处理(使用自己的哈希算法,因此在升级Java时哈希值不会更改),并使用结果将邮件映射到特定分区