跳转到主要内容

描述

Apache Avro 是一种面向行的序列化格式,使用二进制编码来高效处理数据。AvroConfluent 格式支持借助 Confluent Schema Registry (或与其 API 兼容的服务) 读取和写入采用 Avro 编码的消息。 每条消息都使用 Confluent 传输格式:一个魔数字节 (0x00) ,后跟一个 4 字节大端序的 schema ID,再后跟 Avro 二进制数据。读取时,ClickHouse 会通过查询 registry 来解析 schema ID。写入时,ClickHouse 会注册根据输出列推导出的 schema,并将生成的 ID 添加到每一行前面。为获得最佳性能,schema 会被缓存。

数据类型映射

下表列出了 Apache Avro format 支持的所有 数据类型,以及它们在 INSERTSELECT queries 中对应的 ClickHouse 数据类型 ** Variant 类型 会隐式地接受 null 作为字段值,因此,例如 Avro 的 union(T1, T2, null) 会被转换为 Variant(T1, T2)。 因此,当从 ClickHouse 生成 Avro 时,我们必须始终在 Avro 的 union 类型集合中包含 null 类型,因为在进行 schema inference 时,我们无法判断是否有某个值实际为 null *** Avro 逻辑类型 不受支持的 Avro 逻辑类型:
  • time-millis
  • time-micros
  • duration

格式设置

示例

从 Kafka 读取

要使用 Kafka 表引擎 读取采用 Avro 编码的 Kafka topic,请使用 format_avro_schema_registry_url 设置指定 Schema Registry 的 URL。

写入 Kafka

要将 AvroConfluent 消息写入 Kafka topic,需要同时设置 Schema Registry URL 和 subject 名称。首次写入时,schema 会自动注册到 registry。

使用基本身份验证

如果您的 Schema Registry 需要使用基本身份验证 (例如您使用的是 Confluent Cloud) ,可以在 format_avro_schema_registry_url 设置中提供经过 URL 编码的凭据。

故障排除

要监控摄取进度并排查 Kafka 消费者错误,可以查询 system.kafka_consumers 系统表。如果你的部署包含多个副本 (例如 ClickHouse Cloud) ,则必须使用 clusterAllReplicas 表函数。
如果遇到 schema 解析方面的问题,可以使用 kafkacat 配合 clickhouse-local 进行故障排查:
最后修改于 2026年7月1日