我的配置是怎样的:
Map<String, Object> props = kafkaProperties.buildProducerProperties();
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
我应该为JSONObject使用哪个序列化器?
我应该通过kafkaTemplate发送JsonObject到它会更好地发送字符串?(jsonObject.toString ());
总是建议使用特定于的序列化器来代替使用StringSerializer
。原因是,字符串是非常通用的,它可以是一个有效或无效的JSON字符串。
如果你使用StringSerializer
,KafkaProducer
序列化器不会抱怨给定的字符串是否是一个有效的JSON。
因此,如果将来某些开发人员试图发送格式错误的JSON字符串,它可能会影响消费者。而且,您编写的序列化器可以在类似的用例中重用。
因此,最好编写一个新的序列化器来验证JSON字符串(或)编写JSONObjectSerializer
,甚至为您的自定义POJO类编写序列化器(如果您有的话)。
public class JSONObjectSerializer implements Serializer<JSONObject> {
public byte[] serialize(String topic, JSONObject data) {
return data.toString().getBytes(); // or whatever is appropriate.
}
}
你无论如何必须将其转换为JSON,重点是,而不是在你的主逻辑(KafkaProducer)中做,你写在一个Serializer
如果你想将任何对象转换为JSON。
private ObjectMapper objectMapper = new ObjectMapper();
public byte[] serialize(String topic, Object data) {
return objectMapper.writeValueAsBytes(data);
}