简体   繁体   中英

How to use a custom serializer in Vertx Kafka client?

I have the following kafka producer properties.

value.serializer=MyEventSerializer
value.deserializer=MyEventDeserializer
default.value.serde=MyEventSerde

And I have gone through Serializers in the Vertx site and created the producer using

KafkaProducer<String, MyEvent> producer = KafkaProducer.create(vertx, configProperties, String.class, MyEvent.class);

but I am getting the following error:

SEVERE: Unknown class for built-in 
serializer. Supported types are: String, Short, Integer, Long, Float, Double, ByteArray, ByteBuffer, Bytes
java.lang.IllegalArgumentException: Unknown class for built-in serializer. Supported types are: String, Short, Integer, Long, Float, Double, ByteArray, ByteBuffer, Bytes

Is there a way to have custom serializer in Vertx kafka client?

I had to do it manually what KafkaProducer.create() does.

Serializer<String> keySerializer = VertxSerdes.serdeFrom(String.class).serializer();
Serializer<MyEvent> valueSerializer = new MyEventSerializer();
KafkaWriteStream<String, MyEvent> stream = new KafkaWriteStreamImpl(vertx.getOrCreateContext(), new org.apache.kafka.clients.producer.KafkaProducer(configProperties, keySerializer, valueSerializer));
KafkaProducer<String,MyEvent> producer=(new KafkaProducerImpl(stream)).registerCloseHook();

and then write the records using..

KafkaProducerRecord producerRecord= KafkaProducerRecord.create(topicName,key,value);

        producer.write(producerRecord, done -> {
            if (done.succeeded()) {
                // TODO if succeeded
            } else {
                // TODO if failed
            }

         });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM