是否可以使用kafka REST代理读取二进制avro消息?

时间:2018-03-20 14:24:45

标签: rest proxy apache-kafka avro

我不完全了解整个avro序列化生态系统是如何构建的。

最初我想象过这样的事情: enter image description here 但是,我尝试将二进制avro消息发布到主题,然后使用REST代理读取它并收到错误:{"error_code":50002,"message":"Kafka error: java.io.CharConversionException: Invalid UTF-32 character 0xa126572(above 10ffff) at char #1, byte #7)"}

我哪里错了?

如果重要,我使用here中的示例进行编写,并使用here进行阅读。

2 个答案:

答案 0 :(得分:0)

最后我发现我用wrong format (json instead of avro)定义了消费者。否则一切都按预期工作。感谢@ cricket_007提示。

创建我正在做的消费者时

curl -X POST -H "Content-Type: application/vnd.kafka.v2+json" \
--data '{"name": "my_consumer_instance", "format": "json", "auto.offset.reset": "earliest"}' \
http://192.168.99.101:8082/consumers/my_json_consumer

虽然正确的版本是

curl -X POST -H "Content-Type: application/vnd.kafka.v2+json" \
--data '{"name": "my_consumer_instance", "format": "avro", "auto.offset.reset": "earliest"}' \
http://192.168.99.101:8082/consumers/my_json_consumer

答案 1 :(得分:-2)

使用Kafka命令行工具为新主题生成新的Avro消息并将其读回:

/usr/bin/kafka-avro-console-producer生成Avro消息。

/usr/bin/kafka-avro-console-consumer使用Avro消息。

这些工具在快速入门中有记录: https://docs.confluent.io/current/quickstart.html

一旦完成了这项工作,请确保您的自定义客户端与官方命令行生产者一起使用,并确保您的自定义生产者与官方命令行客户端一起使用。

如果你把它分成这样的小步骤,你就会看到问题的确切位置,需要解决更为狭窄的问题。