要件
- Java 11 以上 (Flink 1.17 以降) または 17 以上 (Flink 2.0 以降)
- Apache Flink 1.17 以上
Flink バージョン互換性マトリックス
このコネクタは、Flink 1.17.2 より前のバージョンではテストされていません。
インストールと設定
依存関係として追加する
Flink 2.0 以降の場合
- Maven
- Gradle
- SBT
Flink 1.17 以降の場合
- Maven
- Gradle
- SBT
バイナリをダウンロード
flink_versionは2.0.0または1.17のいずれかですstable_versionは 安定版アーティファクトのリリースバージョン です
DataStream API の使用
コードスニペット
- Java
クイックスタート例
DataStream APIの接続オプション
ClickHouse クライアントオプション
options と serverSettings は、Map<String, String> としてクライアントに渡す必要があります。いずれかに空の map を指定すると、それぞれクライアントまたはサーバーのデフォルト値が使用されます。
利用可能なすべての Java クライアントオプションは、ClientConfigProperties.java および このドキュメントページ に記載されています。利用可能なすべてのサーバーセッション設定は、このドキュメントページ に記載されています。
- Java
シンクオプション
AsyncSinkBase に直接由来しています。
サポートされているデータ型
Flink から ClickHouse にデータを挿入する
注記:
- 日付操作を行う際は、
ZoneIdを指定する必要があります。 - 10 進数の操作を行う際は、精度とスケールを指定する必要があります。
- ClickHouse が Java の
Stringを JSON として parse できるようにするには、ClickHouseClientConfigでenableJsonSupportAsStringを有効にする必要があります。 - コネクタでは、入力 DataStream 内の要素を ClickHouse の ペイロード にマッピングするために
ElementConvertorが必要です。そのため、コネクタにはClickHouseConvertorとPOJOConvertorが用意されており、これらを使用して、前述のDataWriterのシリアライゼーションメソッドでこのマッピングを実装できます。
サポートされている入力フォーマット
setClickHouseFormat 関数を使用します。たとえば、次のように指定します。
デフォルトでは、
ClickHouseClientConfig の setSupportDefault が明示的に true または false に設定されている場合、コネクタはそれぞれ RowBinaryWithDefaults または RowBinary を使用します。メトリクス
制限事項
- このシンクは現在、少なくとも 1 回の配信を保証します。exactly-once セマンティクスへの対応状況はこちらで追跡されています。
- このシンクはまだ、処理できないレコードをバッファリングするための dead-letter キュー (DLQ) をサポートしていません。それまでの間、コネクタは失敗したレコードの再挿入を試み、成功しない場合はそれらを破棄します。この機能の対応状況はこちらで追跡されています。
- このシンクはまだ、Flink の Table API または Flink SQL 経由での作成をサポートしていません。この機能の対応状況はこちらで追跡されています。
ClickHouse バージョンの互換性とセキュリティ
- このコネクタは、最新版や head を含む最近の複数の ClickHouse バージョンに対して、日次の CI ワークフローでテストされています。テスト対象のバージョンは、新しい ClickHouse リリースが有効になるたびに定期的に更新されます。コネクタが日次でテストしているバージョンについては、こちらを参照してください。
- 既知のセキュリティ脆弱性や脆弱性の報告方法については、ClickHouse security policyを参照してください。
- セキュリティ修正や新機能の改善を取りこぼさないよう、コネクタは継続的にアップグレードすることを推奨します。
- 移行で問題が発生した場合は、GitHub の issue を作成してください。こちらで対応します。
高度な使用方法と推奨事項
- 最適なパフォーマンスを得るには、DataStream の element type が Generic 型ではないことを確認してください。詳しくは、Flink の型の区別についてはこちらを参照してください。Generic ではない要素を使用すると、Kryo によるシリアライゼーションのオーバーヘッドを回避でき、ClickHouse へのスループットが向上します。
maxBatchSizeは少なくとも 1000、理想的には 10,000〜100,000 に設定することを推奨します。詳しくは、一括 insert に関するガイドを参照してください。- ClickHouse に対して OLTP スタイルの 重複排除 や upsert を行う場合は、こちらのドキュメントを参照してください。注: これは、再試行時に発生するバッチ単位の 重複排除 とは異なります。
トラブルシューティング
CANNOT_READ_ALL_DATA
スループットが低い
numRequestSubmitted と actualRecordsPerBatch のメトリクスを監視し、バッチ サイズ (maxBatchSize) や flush の頻度をどのように調整すべきか判断してください。あわせて、バッチ サイズに関する推奨事項については 高度な使用方法と推奨事項 も参照してください。
ClickHouse テーブルの行が不足しています
ClickHouseClientConfig.setNumberOfRetries() で設定可能) 。注: デフォルトでは、コネクタはバッチを破棄する前に最大 3 回まで再挿入を試みます。
解決策: 根本原因を特定するため、TaskManager のログやスタックトレースを確認してください。