Java Kafka JDBC连接器中的自定义分区分配

Java Kafka JDBC连接器中的自定义分区分配,java,apache-kafka,apache-kafka-connect,Java,Apache Kafka,Apache Kafka Connect,我有一个用例,需要编写一个自定义逻辑,根据消息中的某些关键参数分配分区。我对此做了一些研究,发现kafka转换支持覆盖转换接口中的一些方法,但我无法在git hub或其他地方编写一些示例代码。是否有人可以共享示例代码或git hub链接以在kafka JDBC源连接器中执行自定义分区分配 提前谢谢 Kafka Connect默认情况下分配分区使用:DefaultPartitioner(org.apache.Kafka.clients.producer.internals.DefaultParti

我有一个用例,需要编写一个自定义逻辑,根据消息中的某些关键参数分配分区。我对此做了一些研究,发现kafka转换支持覆盖转换接口中的一些方法,但我无法在git hub或其他地方编写一些示例代码。是否有人可以共享示例代码或git hub链接以在kafka JDBC源连接器中执行自定义分区分配


提前谢谢

Kafka Connect默认情况下分配分区使用:
DefaultPartitioner
org.apache.Kafka.clients.producer.internals.DefaultPartitioner

如果您需要用一些自定义设置覆盖默认设置,这是可能的,但您必须记住,覆盖适用于所有源连接器。 为此,必须设置
producer.partitioner.class
属性,例如
producer.partitioner.class=com.example.CustomPartitioner
。 此外,您必须使用分区器将jar复制到带有Kafka Connect库的目录中

转换方式:

在转换中也可以设置分区,但这不是正确的方法。 从
Transformation
中,您无法访问主题元数据,这对于分配分区至关重要

如果您想为记录设置分区,代码应该如下所示:

public类AddPartition实现转换{
public static final ConfigDef CONFIG_DEF=new ConfigDef();
@凌驾
公共空间配置(地图道具){
最终SimpleConfig配置=新SimpleConfig(配置定义,道具);
}
@凌驾
公共R申请(R记录){
return record.newRecord(record.topic()、calculatePartition(record)、record.keySchema()、record.key()、record.valueSchema()、record.value()、record.timestamp());
}
私有整数计算部分(R记录){
//基于记录信息的分区计算
返回0;
}
@凌驾
公众假期结束(){
}
@凌驾
公共ConfigDef config(){
返回配置定义;
}
}

您可以发布一些代码来显示您的尝试吗?嗨,Kieveli,谢谢您的回复。我在custom producer中做了这个自定义分区,它工作得很好,但我想在kafka source connector中做同样的事情。因为我找不到一些示例,所以我还没有试过。我之所以这么问,是因为当您有示例代码来显示您遇到的问题时,而不是一般的代码请求时,这个站点非常有效。添加示例并重新表述问题可能会让您更快地获得帮助。@wardziniak-我按照您的建议尝试了自定义分区,但无法覆盖分区分配。我已经在原始帖子中发布了连接器和自定义分区的详细信息。如果我在这里遗漏了什么,请你检查一下,让我知道好吗。感谢您的持续回复@JamesMark,
producer.partitioner.class
是所有连接器的全局设置。您必须在kafka connect global properties中进行设置,例如在文件
connect standalone.properties
(对于standalone)或
connect distributed.properties
@wardziniak中设置。太好了&非常感谢您了!。。它按照您提供的解决方案工作,并在连接器中添加了以下转换!“transforms”:“cusPart”、“transforms.cusPart.type”:“com.anthem.kafkaconnect.AddPartition”