Java 为卡夫卡编写我们自己的自定义分区
我需要根据我们的密钥编写我自己的分区器。看起来我们可以编写自己的自定义分区器 他们说是从卡夫卡的主要网站 制作人将数据发布到他们选择的主题。制片人是 负责选择要分配给哪个分区的记录 在主题内。这可以通过循环方式来完成,只需 平衡负载,或者可以根据某种语义划分来完成 函数(例如基于记录中的某个键)。更多关于使用 马上 在我的例子中,给定一个主题,我们将有Java 为卡夫卡编写我们自己的自定义分区,java,apache-kafka,Java,Apache Kafka,我需要根据我们的密钥编写我自己的分区器。看起来我们可以编写自己的自定义分区器 他们说是从卡夫卡的主要网站 制作人将数据发布到他们选择的主题。制片人是 负责选择要分配给哪个分区的记录 在主题内。这可以通过循环方式来完成,只需 平衡负载,或者可以根据某种语义划分来完成 函数(例如基于记录中的某个键)。更多关于使用 马上 在我的例子中,给定一个主题,我们将有10个分区,因此我们希望使用这个公式来决定数据应该进入哪个分区 partition = client_id % MOD 10 这里的client
10个分区
,因此我们希望使用这个公式来决定数据应该进入哪个分区
partition = client_id % MOD 10
这里的client\u id
将是键,它将始终是数值,它将始终是长数据类型。如何为kafka producer编写我们自己的自定义分区程序,它可以告诉我应该为客户端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版本。keyBytes是分区的序列化密钥。您可以直接使用“key”(带有对象类型)来进行分区。如果您指定了key(即,它不为null),但没有指定分区器,卡夫卡将完全按照您的意愿进行分区 以下是摘自O'Reilly Media出版的《卡夫卡:权威指南》一书的一部分: 如果存在一个键并且使用了默认分区器,Kafka将对该键进行散列(使用其自己的散列算法,因此在升级Java时散列值不会改变),并使用结果将消息映射到特定分区