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时散列值不会改变),并使用结果将消息映射到特定分区