有一个nodejs Kafka生产者,它将文件内容发送到Kafka。当Kafka使用者使用了来自Kafka的消息时,它看起来像-
{"type":"Buffer","data":[91,13 .....]
当我在nodejs Kafka使用者中使用m.message.value.toString('utf8')
时,它将打印实际消息。但是我需要在Java Kafka消费者中消费。我尝试使用property.put("value.serializer.encoding", "utf8")
和new String(consumerRecord.value())
,但仍然打印{"type":"Buffer","data":[91,13 .....]
。我的问题是如何在Nodejs Kafka生产者生产的java中使用字符串格式的消息。
答案 0 :(得分:0)
您应该在生产者和使用者API调用中使用正确的键和值序列化器。
Kafka提供了一些默认的键和值序列化器,例如StringSerializer等。
用于生成和使用字符串消息的字符串序列化程序。
props.put(“ key.serializer”,“ org.apache.kafka.common.serialization.StringSerializer”); props.put(“ value.serializer”,“ org.apache.kafka.common.serialization.StringSerializer”);
例如,您可以参考生产者和消费者文档。
https://kafka.apache.org/10/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html https://kafka.apache.org/10/javadoc/?org/apache/kafka/clients/consumer/KafkaConsumer.html
架构注册表 当您从Node.js发送消息并使用kafka使用者使用该消息时,您需要在java kafka使用者中提供相同的消息反序列化键和值。
有一个选项可以解决此不兼容的问题,即使用schema-registry使用kafka avro存储我们消息的模式。 然后,我们可以在nodejs kafka生产者和java kafka消费者中使用该架构来消耗消息。
Nodejs kafka生产者with avro example
以下是nodejs kafka avro的示例
使用模式注册表example的Java Kafka使用者