我试图使用合流kafka rest代理从我的一个主题中检索avro格式的数据,但不幸的是,我得到了一个反序列化错误。我使用以下命令查询kafka rest代理
curl -X GET -H "Accept: application/vnd.kafka.avro.v2+json"
http://localhost:8082/consumers/my-group/instances/my-consumer/records?timeout=30000
我得到了回应
{
"error_code": 50002,
"message": "Kafka error: Error deserializing key/value for partition input-0 at offset 0. If needed, please seek past the record to continue consumption."
}
kafka rest代理服务器上的日志为:
org.apache.kafka.common.errors.SerializationException: Error deserializing key/value for partition input-0 at offset 0. If needed, please seek past the record to continue consumption.
Caused by: org.apache.kafka.common.errors.SerializationException: Error deserializing Avro message for id -1
Caused by: org.apache.kafka.common.errors.SerializationException: Unknown magic byte!
这些数据是使用kafkaavroserializer生成的,模式出现在模式注册表中。还请注意,通过在cli上使用avro console consumer可以读取数据。
有人知道如何解决这个问题吗?
1条答案
按热度按时间c2e8gylq1#
最有可能的是,除了主题上有效的avro消息外,还有无效的消息。这就是这个错误的含义,正是我在尝试使用rest代理本地使用非avro消息时遇到的错误:
我会用一种工具,比如
kafkacat
检查错误中给定偏移量处的实际消息,例如:这个
-o 0
将在偏移量0处使用消息,并且-c 1
意味着只消耗一条信息。您还可以查找有问题的偏移量,例如topic
avrotest
将偏移移动到1
: