java—为kafka编写自定义分区器

cvxl0en2  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(405)

我需要写我自己的分区基础上的关键,我们有。看起来我们可以编写自己的自定义分区器。
从Kafka的主要网站,他们说
制作者将数据发布到他们选择的主题。生产者负责选择将哪个记录分配给主题中的哪个分区。这可以简单地以循环方式来平衡负载,也可以根据某种语义划分函数(比如基于记录中的某个键)来完成。更多关于分区的使用,请稍候!
在我的情况下,给我们一个主题 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;
}

我正在运行Kafka0.10.0.0版本。

vatpfxk5

vatpfxk51#

keybytes是要在其上进行分区的序列化密钥。您可以直接使用“key”(对象类型)来进行分区。

mkh04yzy

mkh04yzy2#

如果您指定了密钥(即,它不为null),但没有指定分区器,Kafka将完全按照您的意愿执行。
以下摘录自o'reilly media出版的《Kafka:权威指南》:
如果存在一个键并且使用了默认的分区器,kafka将对该键进行散列(使用它自己的散列算法,因此当java升级时散列值不会改变),并使用结果将消息Map到特定的分区。

相关问题