如何在Kafka主题中处理JSON?

时间:2018-06-06 12:50:57

标签: json serialization apache-kafka

我正在构建一个Java应用程序,其中有一些 JSON 对象(特别是来自com.satori.rtm.model.AnyJson的AnyJson对象)和我想在 Kafka 主题中发送这些对象。我应该用AnyJson o String类型发送它们吗?我问这个是因为构造函数KafkaProducer<K, V>在(反)序列化时似乎有一些问题需要处理JSON值。

这在我的制作人配置中

Properties props= new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBrokerEndpoint);
props.put(ProducerConfig.CLIENT_ID_CONFIG, "KafkaProducer");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, IntegerSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
kafkaProducer= new KafkaProducer<Integer, AnyJson>(props);

其中 JsonSerializer.class 来自 org.springframework.kafka.support.serializer.JsonSerializer; 我看到有多个包处理JSON对象(如 kafka.utils.json,com.google.gson.JsonObject ;等)。 然后运行时

ProducerRecord<Integer, AnyJson> record= new ProducerRecord<Integer, AnyJson>(topic, json);
kafkaProducer.send(record);

我有以下例外情况 没有为类com.satori.rtm.connection.GsonSerializer找到序列化程序$ JsonElementWrapper

任何帮助?

1 个答案:

答案 0 :(得分:0)

您可能希望将org.apache.kafka.common.serialization.ByteArraySerializer用于键和值序列化。 现在,您应该使用byte []配置生产者记录。

然后使用Jackson(ObjectMapper)中的http://www.baeldung.com/jackson-object-mapper-tutorial将任何json对象转换为字节数组。