我一直在尝试将 kafka-avro-console-consumer 从 Confluent 连接到我们遗留的 Kafka 集群,该集群是在没有 Confluent Schema Registry 的情况下部署的。
我使用以下属性显式提供了架构:
kafka-console-consumer --bootstrap-server kafka02.internal:9092 \
--topic test \
--from-beginning \
--property key.schema='{"type":"long"}' \
--property value.schema='{"type":"long"}'
但我收到了“未知的魔法字节!”错误
org.apache.kafka.common.errors.SerializationException
是否可以使用 Confluent kafka-avro-console-consumer 消费来自 Kafka 的 Avro 消息,这些消息未使用 Confluent 的 AvroSerializer 和 Schema Registry 序列化?
最佳答案
Confluent Schema Registry 序列化器/反序列化器使用 wire format它在消息的初始字节中包含有关架构 ID 等的信息。
如果您的消息没有使用 Schema Registry 序列化程序进行序列化,那么您将无法使用它反序列化它,并且会得到 Unknown magic byte!
错误。
因此,您需要编写一个消费者来提取消息,使用您的 Avro avsc 模式进行反序列化,然后假设您想保留数据,使用 Schema Registry serializer 重新序列化它。
编辑:我最近写了一篇文章更深入地解释了整个事情:https://www.confluent.io/blog/kafka-connect-deep-dive-converters-serialization-explained
关于apache-kafka - 带有 kafka-avro-console-consumer 的未知魔法字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52399417/