ClickPipes は、Avro および Protobuf でエンコードされたレコード値と構造化 Kafka キーをデコードするためのスキーマレジストリとの連携をサポートしています。
Kafka ClickPipes でサポートされるスキーマレジストリ
Kafka ClickPipes は、2 種類のスキーマレジストリをサポートしています。
- Confluent 互換レジストリ: Confluent スキーマレジストリ自体や Redpanda Schema Registry など、Confluent スキーマレジストリと API 互換性のあるレジストリです。Avro と Protobuf をサポートします。
- AWS Glue Schema Registry: 通常 Amazon MSK から取得される、AWS Glue SerDe でシリアライズされた Avro データ用です。
ClickPipes は現在、Azure Schema Registry をサポートしていません。サポートが必要な場合は、チームまでお問い合わせください。
Confluent 互換レジストリ
設定
ClickPipes の設定でスキーマレジストリを統合するには、次のいずれかの方法を使用する必要があります。
- スキーマの subject への完全なパスを指定します (例:
https://registry.example.com/subjects/events)- 必要に応じて、URL に
/versions/[version]を追加することで特定のバージョンを参照できます (追加しない場合、ClickPipes は最新バージョンを取得します) 。
- 必要に応じて、URL に
- スキーマ ID への完全なパスを指定します (例:
https://registry.example.com/schemas/ids/1000) - スキーマレジストリのルート URL を指定します (例:
https://registry.example.com)
ネットワーク接続
ClickPipes は、指定した URL を使用して HTTPS 経由でスキーマレジストリに接続します。スキーマレジストリをパブリックに公開しておく必要はありません。
Kafka ブローカーに reverse private endpoint (AWS PrivateLink または GCP Private Service Connect) 経由でアクセスしている場合、スキーマレジストリでも同じプライベート接続を利用できます。ClickPipes は reverse private endpoint のプライベート DNS を使ってレジストリのホスト名を名前解決するため、ブローカーと同じくプライベート環境でホストされているレジストリであっても、そのホスト名が reverse private endpoint のプライベート IP アドレスに解決される限り到達できます (エンドポイントのプライベート DNS サポート、または カスタムのプライベート DNS マッピング を使用) 。
次の点に注意してください。
- スキーマレジストリの URL には
https://を使用する必要があります。 - レジストリのホスト名がプライベートアドレスに解決される場合は、ClickPipe 用に選択された reverse private endpoint 経由で到達可能である必要があります。そうでないと、Setup 中の接続チェックは失敗します。
仕組み
ClickPipes は、設定されたスキーマレジストリからスキーマを動的に取得して適用します。
- レコード値にスキーマ ID が埋め込まれている場合は、それを使ってスキーマを取得します。
- レコード値にスキーマ ID が埋め込まれていない場合は、ClickPipe の設定で指定されたスキーマ ID または subject 名を使ってスキーマを取得します。
- レコード値に埋め込みのスキーマ ID がなく、かつ ClickPipe の設定でスキーマ ID も subject 名も指定されていない場合、スキーマは取得されず、ClickPipes のエラーテーブルに
SOURCE_SCHEMA_ERRORが記録され、そのメッセージはスキップされます。 - レコード値がスキーマに準拠していない場合、ClickPipes のエラーテーブルに
DATA_PARSING_ERRORが記録され、そのメッセージはスキップされます。 - Protobuf スキーマのみ: ClickPipes は、依存関係として定義された import 済みのスキーマを読み込みます。外部参照を含む Avro スキーマは、現時点ではサポートされていません。
_key.id などのフィールドのマッピングが設定されている場合、ClickPipes は Kafka のキーに埋め込まれたスキーマ ID をレコード値とは独立して解決します。キーには異なるスキーマ ID を使用できますが、値と同じレジストリファミリーおよびシリアライゼーションフォーマットを使用する必要があります。解決されたキースキーマはキャッシュされ、スキーマ変更は自動的に検出されます。
AWS Glue Schema Registry
プロデューサーが AWS Glue SerDe を使用して Avro をシリアル化する場合 (たとえば、Amazon MSK トピックに対して AWSKafkaAvroSerializer を使用する場合) 、ClickPipes は AWS Glue Schema Registry からこれらのスキーマを直接解決できます。Glue は Confluent 互換レジストリとは異なるワイヤ形式と API を使用するため、個別に設定する必要があります。
AWS Glue Schema Registry の設定は現在、ClickHouse Cloud console でのみ利用できます。ClickPipes API または Terraform プロバイダーではサポートされていません。
設定
ClickPipe 作成ウィザードの Kafka 接続ステップで スキーマレジストリ を有効にし、レジストリタイプ を AWS Glue に設定します。

| フィールド | 必須 | 説明 | 例 |
|---|---|---|---|
| レジストリタイプ | はい | AWS Glue を選択します | AWS Glue |
| AWS リージョン | はい | Glue レジストリが存在するリージョンです。レジストリのリージョンと完全に一致している必要があります。 | us-east-1 |
| レジストリ名 | はい | Glue レジストリの名前です。別のレジストリに属するスキーマは拒否されるため、ClickPipes がスキーマバージョンを解決する際に入力ミスが判明します。 | my-glue-registry |
| IAM ロール ARN | 条件付き | レジストリへのアクセス専用のロールです。ブローカーで IAM 認証を使用している場合は任意ですが、それ以外の場合は必須です。 | arn:aws:iam::123456789012:role/ClickHouseAccessRole-glue |
設定するレジストリ URL はありません。Glue SerDe で生成された各レコードには、そのスキーマバージョンの ID が含まれます。ClickPipes は glue:GetSchemaVersion を使用してスキーマバージョンを解決し、異なるスキーマバージョンごとに API 呼び出しを 1 回行ってキャッシュします。スキーマ進化は自動的に処理されます。ストリームの途中でレコードが新しいスキーマバージョンに切り替わった場合は、最初に検出された時点で解決されます。
IAM の設定
環境に合った方のオプションを使用してください。Amazon MSK では通常、オプション A を使用します。
オプション A: ブローカーの IAM ID を再利用する
Kafka ClickPipe がすでに IAM を使用して MSK に認証している場合、ClickPipes は同じ IAM ID を使用してレジストリを読み取ります。IAM ロール ARN フィールドは空のままにして、次のステートメントを ID の権限に追加します。
- IAM ロール: MSK 用に設定されたロールの権限ポリシーにステートメントを追加します。
- IAM 認証情報: アクセスキーに関連付けられた IAM プリンシパルの権限ポリシーにステートメントを追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ClickPipesGlueSchemaRegistryRead",
"Effect": "Allow",
"Action": ["glue:GetSchemaVersion"],
"Resource": "*"
}
]
}ロールベースの認証では、信頼ポリシーを変更する必要はありません。MSK 用に設定されている信頼関係が、このアクセスをすでにカバーしています。IAM 認証情報では、ロールの信頼ポリシーは使用しません。
オプション B: 専用のレジストリロールを使用する
ブローカーが IAM で認証されない場合 (SASL/SCRAM、SASL/PLAIN、mTLS) 、またはレジストリとブローカーが異なる AWS アカウントにある場合に使用します。
ClickHouse サービスの IAM ロール ARN を取得する
サービスを開き、Settings タブを選択します。Network security information セクションまでスクロールし、arn:aws:iam::123456789012:role/CH-S3-example-service-Role 形式の ARN である サービスロール ID (IAM) の値をコピーします。以降、この値を {ClickHouse_IAM_ARN} と呼びます。AWS にデプロイされた各 ClickHouse サービスには固有のロールがあるため、この値はサービスごとに異なります。

レジストリ IAM ロールを作成する
AWS アカウントに IAM ロールを作成します。ロール名は必ず ClickHouseAccessRole- で始める必要があります。
信頼ポリシーを設定する
{ClickHouse_IAM_ARN} を前のステップで取得した値に置き換えます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "{ClickHouse_IAM_ARN}"
},
"Action": "sts:AssumeRole"
}
]
}アクセス許可ポリシーを設定する
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ClickPipesGlueSchemaRegistryRead",
"Effect": "Allow",
"Action": ["glue:GetSchemaVersion"],
"Resource": "*"
}
]
}ClickPipe を設定する
新しいロールの ARN をウィザードの IAM ロール ARN フィールドに貼り付けます。
トラブルシューティング
| エラー | 原因と対処法 |
|---|---|
access denied retrieving schema version …: check the IAM role grants glue:GetSchemaVersion |
レジストリへのアクセスに使用している IAM アイデンティティに glue:GetSchemaVersion 権限がありません。ロールベースのアクセスの場合、ロールの信頼ポリシーにサービスのロール ID が指定されていない可能性もあります。上記の IAM 設定を再確認してください。 |
… is not authorized to perform: sts:AssumeRole on resource: … |
信頼ポリシーに誤ったプリンシパルが指定されています。エラーには引き受けを試行した正確なロールが含まれています。その値を信頼ポリシーに使用してください。 |
schema version … not found in Glue schema registry |
レコードが、設定されているアカウントまたはリージョンに存在しないスキーマバージョンを参照しています。AWS リージョン がレジストリのリージョンと一致していることを確認してください。 |
schema version … belongs to Glue registry "X", but the pipe is configured for registry "Y" |
producer が、パイプで指定されているものとは異なるレジストリにスキーマを登録しています。レジストリ名 を修正するか、producer が正しいレジストリを使用するよう設定してください。 |
the AWS Glue schema registry only supports the Avro format |
Glue パイプは Avro のみをサポートします。Glue SerDe 経由の JSON および Protobuf はサポートされていません。 |
制限事項
- Avro のみをサポートします。Glue SerDe 経由の JSON Schema および Protobuf はサポートされていません。
- Kafka ログソースのみをサポートします。Kinesis ClickPipes では Glue registry を使用できません。
スキーママッピング
次のルールは、Confluent 互換レジストリと AWS Glue Schema Registry の両方に適用されます。これらのルールは、取得した値のスキーマと ClickHouse の宛先テーブルのマッピングを規定し、_key. プレフィックスを持つ構造化キーからマッピングされたレコードまたはメッセージのフィールドにも適用されます。
- スキーマに、ClickHouse の宛先マッピングに含まれていないフィールドがある場合、そのフィールドは無視されます。
- スキーマに、ClickHouse の宛先マッピングで定義されているフィールドがない場合、ClickHouse のカラムには 0 や空文字列などの「ゼロ」値が設定されます。なお、
DEFAULT式はサポートされていません。 - スキーマのフィールドと ClickHouse のカラムに互換性がない場合、その行/メッセージの挿入は失敗し、その失敗は ClickPipes のエラーテーブルに記録されます。なお、いくつかの暗黙的な変換 (たとえば数値型同士) はサポートされていますが、すべてがサポートされるわけではありません (たとえば、Avro のレコードフィールドを
Int32の ClickHouse カラムに挿入することはできません) 。