パイプラインの要件
- ソースの Pub/Sub サブスクリプションが存在している必要があります。
- サブスクリプションにパブリッシュされるメッセージは、有効な JSON である必要があります。
- ClickHouse のターゲットテーブルが存在している必要があり、そのカラム名は JSON ペイロード内のフィールド名と一致している必要があります。
- ClickHouse ホストは、Dataflow の worker マシンからアクセス可能である必要があります。
- 少なくとも 1 つのデッドレター宛先 (
clickHouseDeadLetterTableまたはdeadLetterTopic) を指定する必要があります。両方を指定した場合、処理に失敗したメッセージは両方の宛先に同時にルーティングされます。 clickHouseDeadLetterTableを設定する場合、デッドレターテーブルは デッドレター処理 に示されているスキーマで、ClickHouse 内にあらかじめ存在している必要があります。deadLetterTopicを設定する場合、Pub/Sub トピックはあらかじめ存在している必要があります。
Template パラメータ
すべての
ClickHouseIO パラメータのデフォルト値は、ClickHouseIO Apache Beam Connector を参照してください。メッセージ形式とスキーマのマッピング
- ClickHouse のターゲットテーブルのスキーマを取得します。
- その ClickHouse スキーマから Beam の
Rowスキーマを構築します。 - 受信した各 Pub/Sub メッセージについて JSON ペイロードを解析し、ClickHouse スキーマで定義されたフィールドを読み取って行を組み立てます。
型変換
バッチ処理とウィンドウ化
これらの値を調整することで、レイテンシと
INSERT 効率のバランスを取れます。ウィンドウが小さいほどエンドツーエンドのレイテンシは低くなり、ウィンドウが大きいほど INSERT バッチは少なくなり、1 回あたりのサイズは大きくなります。
デッドレター処理
clickHouseDeadLetterTable または deadLetterTopic の少なくともいずれか 1 つを指定する必要があります。両方が設定されている場合、失敗したメッセージはその両方に送信されます。
ClickHouse デッドレターテーブル
clickHouseDeadLetterTable が設定されている場合、デッドレターテーブルは次の固定スキーマですでに作成されている必要があります。
単一ノードデプロイメント向けの最小定義:
デプロイ環境に合わせて、エンジンと
ORDER BY句を調整してください。レプリケートテーブルにはReplicatedMergeTreeを使用し、分散構成ではON CLUSTERを追加するほか、必要に応じてパーティション化や有効期限 (TTL) も調整してください。Pub/Sub デッドレタートピック
deadLetterTopic が設定されている場合、失敗した各メッセージは次の内容でそのトピックに再公開されます。
- ペイロード: 元のメッセージのバイト列。
- 属性
errorMessage: 失敗時に記録された例外メッセージ。 - 属性
failedAt: 行の処理が失敗した時点の処理時刻タイムスタンプ。
テンプレートの実行
テンプレートの設定要件と前提条件を十分に理解するため、このドキュメント、特に上記の各セクションを必ず確認してください。
-
CREATE JOB FROM TEMPLATEボタンをクリックします。 - テンプレートのフォームが開いたら、ジョブ名を入力し、使用するリージョンを選択します。
-
Dataflow Template入力欄にClickHouseまたはPub/Subと入力し、Pub/Sub to ClickHouseテンプレートを選択します。 -
選択すると、フォームが展開されます。以下を入力します。
projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>の形式で Pub/Sub の入力サブスクリプション。- ClickHouse のエンドポイント URL — ClickHouse Cloud の場合は
https://<HOST>:8443を使用します。 - ClickHouse のデータベース、ターゲットテーブル、ユーザー名、パスワード。
- 少なくとも 1 つの デッドレターの宛先: ClickHouse テーブルまたは Pub/Sub トピック (あるいはその両方) 。
-
必要に応じて、Template パラメータ セクションで詳しく説明しているとおり、バッチ処理 (
windowSeconds、batchRowCount) およびClickHouseIOのチューニングパラメータをカスタマイズします。
ジョブを監視する
PubSubToClickHouse ネームスペース配下に次のカスタムメトリクスも出力します。これらは Dataflow のジョブページで確認できます。
トラブルシューティング
メモリ制限 (合計) 超過エラー (コード 241)
- インスタンスのリソースを増やす: データ処理の負荷に対応できるよう、より多くのメモリを備えた大きなインスタンスに ClickHouseサーバーをアップグレードします。
- バッチサイズを小さくする: Dataflow ジョブの設定で
batchRowCount(および/またはmaxInsertBlockSize) を減らし、ClickHouse に送信するデータの chunk を小さくして、バッチごとのメモリ消費を抑えます。
すべてのメッセージが デッドレター 宛先に送られる
- JSON フィールド名が ClickHouse のカラム名と完全に一致していない (この照合では大文字と小文字が区別されます) 。
- JSON の値をカラム型に変換できない (たとえば、
DateTimeカラムに ISO-8601 形式ではない文字列が入っている場合) 。 - パイプラインの起動後にターゲットテーブルのスキーマが変更された — スキーマは起動時に一度だけ取得されます。スキーマ変更を適用したら、ジョブを再起動してください。
error_message および stack_trace カラム (または Pub/Sub の デッドレター メッセージの errorMessage 属性) を確認してください。
パイプラインは開始するが、ClickHouse に行が届かない
- サブスクリプションがメッセージを受信していることを確認してください。Dataflow のジョブページで
messages-receivedメトリックを確認します。 - 時間ベースのモード (
windowSecondsのみ) では、行がフラッシュされるのはウィンドウ境界のタイミングだけです。フラッシュが発生していることを確認するため、windowSecondsを小さくしてください。 - Dataflow ワーカーと ClickHouse エンドポイント間のネットワーク到達性を確認してください (ファイアウォール、VPC ピアリング、または Private Service Connect) 。
Template のソースコード
GoogleCloudPlatform/DataflowTemplates— Google Cloud Platform のアップストリーム リポジトリ。ClickHouse/DataflowTemplates— ClickHouse のフォーク。