如何从原始缓冲区对象中获取字符串消息Kafka Java

时间:2019-03-11 05:56:50

标签: java node.js apache-kafka node-kafka

有一个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中使用字符串格式的消息。

1 个答案:

答案 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的示例 enter image description here

使用模式注册表example的Java Kafka使用者