我不完全了解整个avro序列化生态系统是如何构建的。
最初我想象过这样的事情:
但是,我尝试将二进制avro消息发布到主题,然后使用REST代理读取它并收到错误:{"error_code":50002,"message":"Kafka error: java.io.CharConversionException: Invalid UTF-32 character 0xa126572(above 10ffff) at char #1, byte #7)"}
。
我哪里错了?
答案 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
一旦完成了这项工作,请确保您的自定义客户端与官方命令行生产者一起使用,并确保您的自定义生产者与官方命令行客户端一起使用。
如果你把它分成这样的小步骤,你就会看到问题的确切位置,需要解决更为狭窄的问题。