我们将在项目中部署Apache Kafka 2.10,并通过生产者和消费者之间的JSON对象进行通信。
到目前为止,我想我需要:
关于第一点,我认为它应该是这样的:
@Override
public byte[] serialize(String topic, T data) {
if (data == null)
return null;
try {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsBytes(data);
} catch (Exception e) {
throw new SerializationException("Error serializing JSON message", e);
}
}
T data
可以作为字符串"{\"key\" : \"value\"}"
传递。
然而到目前为止有2-4点存在问题。我在自定义反序列化器中试过这个:
@Override
public JsonNode deserialize(String topic, byte[] bytes) {
if (bytes == null)
return null;
JsonNode data;
try {
objectMapper = new ObjectMapper();
data = objectMapper.readTree(bytes);
} catch (Exception e) {
throw new SerializationException(e);
}
return data;
}
在我的消费者中我尝试过:
KafkaConsumer<String, TextNode> consumer = new KafkaConsumer<String, TextNode>(messageConsumer.properties);
consumer.subscribe(Arrays.asList(messageConsumer.topicName));
int i = 0;
while (true) {
ConsumerRecords<String, TextNode> records = consumer.poll(100);
for (ConsumerRecord<String, TextNode> record : records) {
System.out.printf("offset = %d, key = %s, value = %s\n", record.offset(), record.key(), record.value().asText());
}
}
我认为这会生成一个正确的原始json字符串,但我调用record.value().asText()
的所有内容都是一些哈希字符串"IntcImtleVwiIDogXCJ2YWx1ZVwiIH0i"
。
非常感谢任何通过卡夫卡JSON进行交流的建议或示例。
答案 0 :(得分:0)
有一个内置的JsonSerializer和Apache Kafka。我不确定2.10对于一个版本是什么意思,但是当前版本0.10.0.1肯定可以为你做序列化。只需查看JsonSerializer类。
答案 1 :(得分:0)
我建议您将UTF-8编码用作字符串JSON序列化器:
1.生产者以JSON字符串("{\"key\" : \"value\"}"
)的形式获取数据
2.生产者使用UTF-8(jsonString.getBytes(StandardCharsets.UTF_8);
)将JSON字符串序列化为字节
3.生产者将此字节发送给Kafka
4.消费者从Kafka读取字节
5.消费者使用UTF-8(new String(consumedByteArray, StandardCharsets.UTF_8);
)将字节反序列化为JSON字符串
6.消费者使用JSON字符串
我故意不使用您的代码,因此流程是可以理解的,我认为您可以轻松地将此示例应用于您的项目:)