Java 如何为kafka mirror maker创建自定义序列化程序?

Java 如何为kafka mirror maker创建自定义序列化程序?,java,serialization,apache-kafka,Java,Serialization,Apache Kafka,我想使用kafka镜像生成器将数据从kafka群集A复制到kafka群集B。另外,我需要一些特殊的序列化逻辑。我知道,要创建自定义序列化程序,我必须实现序列化程序接口。 因此,问题在于kafka mirror maker没有使用我在producer.properties中指定的自定义序列化程序: bootstrap.servers=kafkaB:9092 client.id=producerB value.serializer=mypackage.CustomSerializer 相反,我看到

我想使用kafka镜像生成器将数据从kafka群集A复制到kafka群集B。另外,我需要一些特殊的序列化逻辑。我知道,要创建自定义序列化程序,我必须实现
序列化程序
接口。 因此,问题在于kafka mirror maker没有使用我在producer.properties中指定的自定义序列化程序:

bootstrap.servers=kafkaB:9092
client.id=producerB
value.serializer=mypackage.CustomSerializer
相反,我看到使用了默认的
ByteArraySerializer

要构建序列化程序,我使用gradle:

dependencies {
    constraints {
        compileOnly(group: 'org.apache.kafka', name: 'kafka-clients', version: '2.1.0')
    }

    compileOnly(group: 'org.apache.kafka', name: 'kafka-clients')
}
然后将编译好的jar和其他jar(合流kafka docker)一起放入目录中:
/usr/share/java/kafka/customSerializer.jar

我的序列化程序的逻辑目前并不重要:

public class CustomSerializer implements Serializer<Object> {
    public CustomSerializer() {
    }

    @Override
    public void configure(Map<String, ?> configs, boolean isKey) {

    }

    @Override
    public byte[] serialize(String topic, Object data) {
        return (new String((byte[]) data)).toUpperCase().getBytes(StandardCharsets.UTF_8);
    }

    @Override
    public void close() {
    }
}

如我所见,没有为键/值使用自定义序列化程序的选项,您仍然需要反序列化字节,因此我不确定是否理解仅重写序列化程序的目的

如果要操作消息,请查看
MessageHandler
接口,然后查看
--handler
参数。在这里,您需要同时包装反序列化程序和序列化程序

此处是重命名主题的示例-

  // Always set producer key and value serializer to ByteArraySerializer.
      producerProps.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, classOf[ByteArraySerializer].getName)
      producerProps.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, classOf[ByteArraySerializer].getName)
      producer = new MirrorMakerProducer(sync, producerProps)