Confluent HTTP Sink コネクタ
HTTP コネクタは Confluent Enterprise License の下で配布されています。
クイックスタート手順
1. 接続情報を確認する
ClickHouse Cloud サービスの詳細は、ClickHouse Cloud コンソールで確認できます。
サービスを選択し、Connect をクリックします。
HTTPS を選択します。接続情報は
curl コマンドの例として表示されます。
セルフマネージド ClickHouse を使用している場合、接続情報は ClickHouse 管理者によって設定されます。
2. Kafka Connect と HTTP Sink コネクタを実行する
- セルフマネージド: Confluent パッケージをダウンロードしてローカルにインストールします。コネクタのインストールについては、こちらに記載されている手順に従ってください。 confluent-hub によるインストール方法を使用すると、ローカルの構成ファイルが更新されます。
- Confluent Cloud: Kafka のホスティングに Confluent Cloud を使用している場合は、HTTP Sink の完全マネージド型バージョンを利用できます。この場合、ClickHouse 環境が Confluent Cloud からアクセス可能である必要があります。
以下の例では Confluent Cloud を使用します。
3. ClickHouse に宛先テーブルを作成する
4. HTTP Sink の設定
HTTP Sink コネクタを設定します。
- 作成したトピック名を指定します
- 認証
HTTP Url-INSERTクエリを指定した ClickHouse Cloud の URL<protocol>://<clickhouse_host>:<clickhouse_port>?query=INSERT%20INTO%20<database>.<table>%20FORMAT%20JSONEachRow。注: クエリはエンコードする必要があります。Endpoint Authentication type- BASICAuth username- ClickHouse のユーザー名Auth password- ClickHouse のパスワード
この HTTP Url は指定を誤りやすいため、問題を避けるにはエスケープを正確に行ってください。
- 設定
Input Kafka record value format- ソースデータによって異なりますが、多くの場合は JSON または Avro です。以下の設定ではJSONを前提とします。advanced configurationsセクション内:HTTP Request Method- POST に設定しますRequest Body Format- jsonBatch batch size- ClickHouse の推奨に従い、少なくとも 1000 に設定します。Batch json as array- trueRetry on HTTP codes- 400-500。必要に応じて調整してください。たとえば、ClickHouse の前段に HTTP プロキシがある場合は変更が必要になることがあります。Maximum Reties- デフォルトの (10) で適切ですが、より堅牢に再試行したい場合は調整してもかまいません。
5. 接続のテスト
作成したメッセージが ClickHouse インスタンスに書き込まれていることを確認します。
トラブルシューティング
HTTP Sink がメッセージをバッチ化しない
Kafka ヘッダー値が異なるメッセージを含む場合、HTTP Sink コネクタはリクエストをバッチ化しません。
- Kafka レコードのキーが同じであることを確認してください。
- HTTP API の URL にパラメータを追加すると、レコードごとに一意の URL になることがあります。そのため、追加の URL パラメータを使用するとバッチ化は無効になります。
400 Bad Request
CANNOT_PARSE_QUOTED_STRING
String カラムに挿入する際に、HTTP Sink が次のメッセージを出して失敗する場合:
input_format_json_read_objects_as_strings=1 を URL エンコードされた文字列 SETTINGS%20input_format_json_read_objects_as_strings%3D1 として指定します
GitHub データセットを読み込む (任意)
1. 設定を準備する
http.api.url です。ClickHouse の HTTP インターフェイス では、INSERT ステートメントを URL のパラメータとしてエンコードする必要があります。これには、フォーマット (この場合は JSONEachRow) と移行先データベースを含める必要があります。フォーマットは Kafka のデータと一致している必要があり、そのデータは HTTP ペイロード内で文字列に変換されます。これらのパラメータは URL エスケープする必要があります。GitHub データセットに対するこのフォーマットの例 (ClickHouse をローカルで実行していることを前提) は、以下のとおりです。
request.method- POST に設定しますretry.on.status.codes- 任意のエラーコードで再試行するには 400-500 に設定します。データ内で想定されるエラーに応じて調整してください。request.body.format- ほとんどの場合、JSON になります。auth.type- ClickHouse で認証を使用する場合は BASIC に設定します。現在のところ、ClickHouse と互換性のある他の認証方式はサポートされていません。ssl.enabled- SSL を使用する場合は true に設定します。connection.user- ClickHouse のユーザー名。connection.password- ClickHouse のパスワード。batch.max.size- 1 回の batch で送信する行数です。十分に大きな値を設定してください。ClickHouse の推奨事項によると、1000 は最低値と考えるべきです。tasks.max- HTTP Sink コネクタは 1 つ以上のタスクの実行をサポートしています。これはパフォーマンス向上に利用できます。batch size とあわせて、パフォーマンス改善の主要な手段となります。key.converter- キーの型に応じて設定します。value.converter- topic 上のデータ型に基づいて設定します。このデータにスキーマは不要です。ここでのフォーマットは、パラメータhttp.api.urlで指定する FORMAT と一致している必要があります。最も簡単なのは、JSON と org.apache.kafka.connect.json.JsonConverter コンバータを使用する方法です。org.apache.kafka.connect.storage.StringConverter コンバータを使って値を文字列として扱うことも可能ですが、その場合は INSERT ステートメント内で関数を使って値を抽出する必要があります。io.confluent.connect.avro.AvroConverter コンバータを使用する場合、ClickHouse は Avro format もサポートしています。