Kafka ClickPipes 支持的 Schema Registry
- 兼容 Confluent 的 Schema Registry:任何与 Confluent Schema Registry API 兼容的 registry,例如 Confluent Schema Registry 本身和 Redpanda Schema Registry。支持 Avro 和 Protobuf。
- AWS Glue Schema Registry:适用于使用 AWS Glue SerDe 序列化的 Avro 数据,通常来自亚马逊 MSK。
兼容 Confluent 的 Schema Registry
配置
- 提供 schema subject 的完整路径 (例如
https://registry.example.com/subjects/events)- 也可以通过在 URL 后附加
/versions/[version]来指定特定版本 (否则 ClickPipes 会获取最新版本) 。
- 也可以通过在 URL 后附加
- 提供 schema ID 的完整路径 (例如
https://registry.example.com/schemas/ids/1000) - 提供 Schema Registry 的根 URL (例如
https://registry.example.com)
网络连通性
- Schema Registry URL 必须使用
https://。 - 如果 registry 主机名解析为私有地址,则它必须能通过为 ClickPipe 选择的反向专用终结点访问;否则,设置期间的连通性检查将失败。
工作原理
- 如果记录值中嵌入了 schema ID,则会使用该 ID 获取 schema。
- 如果记录值中未嵌入 schema ID,则会使用 ClickPipe 配置中指定的 schema ID 或 subject 名称来获取 schema。
- 如果记录值写入时未嵌入 schema ID,且 ClickPipe 配置中也未指定 schema ID 或 subject 名称,则不会获取 schema,该消息将被跳过,并在 ClickPipes 错误表中记录
SOURCE_SCHEMA_ERROR。 - 如果记录值不符合 schema,则该消息将被跳过,并在 ClickPipes 错误表中记录
DATA_PARSING_ERROR。 - 仅适用于 Protobuf schema:ClickPipes 会加载定义为依赖项的所有导入 schema。暂不支持带外部引用的 Avro schema。
_key.id 等字段的映射时,ClickPipes 会独立于记录值解析嵌入在 Kafka 键中的 schema ID。键可以使用不同的 schema ID,但必须与值使用相同的 registry 家族和序列化格式。已解析的键 schema 会被缓存,并会自动检测 schema 变更。
AWS Glue Schema Registry
AWSKafkaAvroSerializer) ,ClickPipes 可以直接从 AWS Glue Schema Registry 解析这些 schema。Glue 使用的传输格式和 API 与兼容 Confluent 的 registry 不同,因此需要单独配置。
目前,AWS Glue Schema Registry configuration 只能通过 ClickHouse Cloud 控制台进行配置,不支持通过 ClickPipes API 或 Terraform provider 配置。
仅支持 Avro。 AWS Glue registry 仅支持 Avro 格式。Glue SerDe 也可以封装 JSON 和 Protobuf,但 ClickPipes 不支持这些格式,创建管道时会被拒绝。
配置
无需配置 registry URL。Glue SerDe 生成的每条记录都携带自身 schema version 的 ID。ClickPipes 使用
glue:GetSchemaVersion 解析并缓存这些 schema;每个不同的 schema version 仅需一次 API 调用。schema evolution 会自动处理:当记录在 stream 中途切换到新的 schema version 时,会在首次遇到该版本时进行解析。
IAM 设置
选项 A:复用 broker 的 IAM 身份
- **IAM role:**将该语句添加到为 MSK 配置的角色的权限策略中。
- **IAM credentials:**将该语句添加到与访问密钥关联的 IAM 主体的权限策略中。
选项 B:使用专用 registry 角色
仅适用于 AWS 部署。 此选项要求将 ClickHouse Cloud 服务部署在 AWS 上,因为它依赖该服务的 AWS IAM 角色。如果您的服务运行在 GCP 或 Azure 上,且 broker 不使用 IAM 身份验证,则无法配置专用 registry 角色。
1
获取 ClickHouse 服务 IAM 角色 ARN
打开服务,选择 设置 选项卡,滚动到 Network security 信息 部分,然后复制 服务角色 ID (IAM) 的值。该值是格式类似于
arn:aws:iam::123456789012:role/CH-S3-example-service-Role 的 ARN。下文将其称为 {ClickHouse_IAM_ARN}。部署在 AWS 上的每个 ClickHouse 服务都有各自的角色,因此每个服务的此值都不同。2
创建 registry IAM 角色
在您的 AWS 账户中创建 IAM 角色。角色名称必须以 配置权限策略
ClickHouseAccessRole- 开头。配置信任策略将 {ClickHouse_IAM_ARN} 替换为上一步获取的值。3
配置 ClickPipe
将新角色的 ARN 粘贴到向导中的 IAM 角色 ARN 字段。
IAM 资源范围。 这些示例遵循 AWS 文档中针对反序列化器的策略及其
AWSGlueSchemaRegistryReadonlyAccess 托管策略。两者均授予对 "*" 执行 glue:GetSchemaVersion 的权限。ClickPipes 会根据您配置的 registry 名称 独立检查每个解析出的 schema,并拒绝来自其他 registry 的版本。故障排查
限制
- 仅支持 Avro。不支持通过 Glue SerDe 使用 JSON Schema 或 Protobuf。
- 仅支持 Kafka 源。Kinesis ClickPipes 无法使用 Glue registry。
Schema 映射
_key. 前缀的结构化键映射而来的记录或消息字段:
- 如果 schema 包含某个字段,但该字段未包含在 ClickHouse 目标端映射中,则该字段会被忽略。
- 如果 schema 缺少 ClickHouse 目标端映射中定义的某个字段,则 ClickHouse 列将填充为“零”值,例如 0 或空字符串。请注意,不支持
DEFAULT表达式。 - 如果 schema 字段与 ClickHouse 列不兼容,则该行/消息的插入会失败,且失败记录会写入 ClickPipes 错误表。请注意,系统支持一些隐式转换 (例如数值类型之间的转换) ,但并非全部都支持 (例如,Avro record 字段不能插入到
Int32ClickHouse 列中) 。