使用 Avro 格式传递 Kafka 消息要比 Json 更加高效,因为它是二进制格式,在启用了 Confluent Schema Registry 的情况下,会进一步地提升传输效率,因为 Avro 中的 Schema 信息将不再出现在消息中,消息体积会进一步压缩,同时,还可以利用到 Schema Registry 的其他好处,例如 Schema Evolution 管理。
但是,由于 Avro 是二进制格式,且使用了 Confluent Schema Registry 后 Schema 信息也被剥离,使用 kafka-console-consumer.sh
输出的消息都是乱码,无法阅读,这会给开发和调试带来一些麻烦。正确查看 Avro 消息的方法是使用 Confluent Schema Registry 提供的一个命令行工具: kafka-avro-console-consumer
,这个工具是内置在 cp-schema-registry 这个组件中的,不管是手动安装还是使用 Docker 启动 cp-schema-registry 后,都可以直接使用该命令输出 Kafka 的 Avro 消息,类似于 kafka-console-consumer
。以下是以 docker 形式登录 cp-schema-registry 后输出 Avro 消息的一个示例:
# connect to a confluentinc/cp-schema-registry container, open bash for input commands.
docker run -it --rm confluentinc/cp-schema-registry