ClickHouse/docs/ja/integrations/data-ingestion/kafka/kafka-connect-jdbc.md
2024-11-18 11:58:58 +09:00

12 KiB
Raw Blame History

sidebar_label sidebar_position slug description
Kafka Connect JDBC コネクタ 4 /ja/integrations/kafka/kafka-connect-jdbc Kafka Connect と ClickHouse を使用した JDBC コネクタ シンク

import ConnectionDetails from '@site/docs/ja/_snippets/_gather_your_details_http.mdx';

JDBC コネクタ

:::note このコネクタは、データが簡単でプリミティブ・データ型intで構成されている場合にのみ使用するべきです。ClickHouse固有の型、例えばマップはサポートされていません。 :::

以下の例では、Kafka Connect の Confluent ディストリビューションを使用します。

以下では、Kafka の単一トピックからメッセージを取り込み、ClickHouse テーブルに行を挿入する簡単なインストールについて説明します。Kafka 環境を持っていない場合、Confluent Cloud の使用を推奨します。これは、無料で利用できる十分なレベルを提供しています。

JDBC コネクタにはスキーマが必要であることに注意してくださいJDBC コネクタでプレーンな JSON や CSV を使用することはできません)。スキーマは各メッセージにエンコードすることもできますが、関連オーバーヘッドを避けるために Confluent スキーマレジストy の利用を強く推奨します。提供された挿入スクリプトはメッセージからスキーマを自動的に推測し、それをレジストリに挿入します。このスクリプトは他のデータセットでも再利用可能です。Kafka のキーは文字列であると仮定しています。Kafka スキーマの詳細はこちらで確認できます。

ライセンス

JDBC コネクタは Confluent Community License の下で配布されています。

手順

接続の詳細を収集する

1. Kafka Connect と コネクタをインストールする

Confluent パッケージをダウンロードし、ローカルにインストールしたと仮定しています。コネクタのインストールの手順についてはこちらを参照してください。

confluent-hub のインストール方法を使用すると、ローカルの構成ファイルが更新されます。

Kafka から ClickHouse にデータを送信するには、コネクタの Sink コンポーネントを使用します。

2. JDBC ドライバをダウンロードしてインストールする

ClickHouse JDBC ドライバー clickhouse-jdbc-<version>-shaded.jarこちらからダウンロードしてインストールします。そして、こちらの詳細に従って Kafka Connect にインストールします。他のドライバも動作する可能性がありますが、テストされていません。

:::note

一般的な問題: ドキュメントは jar を share/java/kafka-connect-jdbc/ にコピーすることを推奨しています。ドライバが見つからない場合、ドライバを share/confluent-hub-components/confluentinc-kafka-connect-jdbc/lib/ にコピーするか、plugin.path を変更してドライバを含めるようにします。詳しくは以下を参照してください。

:::

3. 構成を準備する

こちらの手順に従って、インストールタイプに関連する Connect をセットアップし、スタンドアロンと分散クラスターの違いに注意してください。Confluent Cloud を使用する場合、分散セットアップが関連します。

以下のパラメータは、ClickHouse で JDBC コネクタを使用する場合に関連します。全パラメータ一覧はこちらで確認できます。

  • connection.url - 形式は jdbc:clickhouse://&lt;clickhouse host>:&lt;clickhouse http port>/&lt;target database> とする必要があります。
  • connection.user - ターゲットデータベースへの書き込みアクセス権を持つユーザー
  • table.name.format - データを挿入する ClickHouse テーブル。存在している必要があります。
  • batch.size - 一度に送信する行数。ClickHouse の推奨事項に基づき、1000 を最小値として考慮してください。
  • tasks.max - JDBC Sink コネクタは 1 つ以上のタスクの実行をサポートしています。これによりパフォーマンスを向上させることができます。バッチサイズと共に、パフォーマンス向上の主要手段を表します。
  • value.converter.schemas.enable - スキーマレジストリを使用している場合は false に設定し、メッセージにスキーマを埋め込む場合は true に設定します。
  • value.converter - データタイプに応じて設定します。たとえば JSON の場合は “io.confluent.connect.json.JsonSchemaConverter”。
  • key.converter - “org.apache.kafka.connect.storage.StringConverter” に設定します。文字列キーを利用します。
  • pk.mode - ClickHouse には関連しないため、none に設定します。
  • auto.create - サポートされておらず、false に設定する必要があります。
  • auto.evolve - 将来的にサポートされる可能性があるため、false を推奨します。
  • insert.mode - “insert” に設定します。他のモードは現在サポートされていません。
  • key.converter - キーのタイプに応じて設定します。
  • value.converter - トピック上のデータタイプに基づいて設定します。このデータはサポートされたスキーマを持っている必要があります。JSON、Avro、または Protobuf 形式など。

サンプルデータセットをテストに使用する場合、以下を設定してください:

  • value.converter.schemas.enable - スキーマレジストリを使用するため false に設定します。スキーマを各メッセージに埋め込む場合は true に設定します。
  • key.converter - Set to “org.apache.kafka.connect.storage.StringConverter”. 文字列キーを利用します。
  • value.converter - Set “io.confluent.connect.json.JsonSchemaConverter”.
  • value.converter.schema.registry.url - スキーマサーバーの URL を設定し、value.converter.schema.registry.basic.auth.user.info によりスキーマサーバーへの認証情報を入力します。

Github のサンプルデータ用の構成ファイルの例はこちらで確認できます。Connect がスタンドアロンモードで実行され、Kafka が Confluent Cloud にホストされていることを前提としています。

4. ClickHouse テーブルを作成する

テーブルが作成されていることを確認し、既存の例から存在する場合は削除します。以下に示すのは、削減された Github データセットに対応した例です。未対応の Array や Map 型の不在に注意してください:

CREATE TABLE github
(
    file_time DateTime,
    event_type Enum('CommitCommentEvent' = 1, 'CreateEvent' = 2, 'DeleteEvent' = 3, 'ForkEvent' = 4, 'GollumEvent' = 5, 'IssueCommentEvent' = 6, 'IssuesEvent' = 7, 'MemberEvent' = 8, 'PublicEvent' = 9, 'PullRequestEvent' = 10, 'PullRequestReviewCommentEvent' = 11, 'PushEvent' = 12, 'ReleaseEvent' = 13, 'SponsorshipEvent' = 14, 'WatchEvent' = 15, 'GistEvent' = 16, 'FollowEvent' = 17, 'DownloadEvent' = 18, 'PullRequestReviewEvent' = 19, 'ForkApplyEvent' = 20, 'Event' = 21, 'TeamAddEvent' = 22),
    actor_login LowCardinality(String),
    repo_name LowCardinality(String),
    created_at DateTime,
    updated_at DateTime,
    action Enum('none' = 0, 'created' = 1, 'added' = 2, 'edited' = 3, 'deleted' = 4, 'opened' = 5, 'closed' = 6, 'reopened' = 7, 'assigned' = 8, 'unassigned' = 9, 'labeled' = 10, 'unlabeled' = 11, 'review_requested' = 12, 'review_request_removed' = 13, 'synchronize' = 14, 'started' = 15, 'published' = 16, 'update' = 17, 'create' = 18, 'fork' = 19, 'merged' = 20),
    comment_id UInt64,
    path String,
    ref LowCardinality(String),
    ref_type Enum('none' = 0, 'branch' = 1, 'tag' = 2, 'repository' = 3, 'unknown' = 4),
    creator_user_login LowCardinality(String),
    number UInt32,
    title String,
    state Enum('none' = 0, 'open' = 1, 'closed' = 2),
    assignee LowCardinality(String),
    closed_at DateTime,
    merged_at DateTime,
    merge_commit_sha String,
    merged_by LowCardinality(String),
    review_comments UInt32,
    member_login LowCardinality(String)
) ENGINE = MergeTree ORDER BY (event_type, repo_name, created_at)

5. Kafka Connect を起動する

Kafka Connect をスタンドアロンまたは分散モードで起動します。

./bin/connect-standalone connect.properties.ini github-jdbc-sink.properties.ini

6. Kafka にデータを追加する

提供されたスクリプトと設定を使用して Kafka にメッセージを挿入します。github.config を修正して Kafka の認証情報を含める必要があります。このスクリプトは現在、Confluent Cloud での使用向けに構成されています。

python producer.py -c github.config

このスクリプトは、任意の ndjson ファイルを Kafka トピックに挿入するために使用できます。スキーマを自動的に推測しようとします。提供されたサンプル設定は 10k のメッセージのみを挿入しますが、必要があればこちらで修正してください。この構成はまた、Kafka への挿入中にデータセットから互換性のない Array フィールドを削除します。

これは JDBC コネクタがメッセージを INSERT 文に変換するために必要です。自身のデータを使用する場合、スキーマを各メッセージに挿入(value.converter.schemas.enable を true に設定)するか、クライアントがメッセージをスキーマレジストリに参照しながら公開することを確認してください。

Kafka Connect はメッセージの消費を始め、ClickHouse に行を挿入していくはずです。「[JDBC Compliant Mode] トランザクションはサポートされていません。」の警告は予期されており、無視することができます。

ターゲットテーブル「Github」で簡単な読み取りを行うと、データ挿入が確認できます。

SELECT count() FROM default.github;
| count\(\) |
| :--- |
| 10000 |

推奨されるさらなる読み物