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 もサポートしています。