メインコンテンツまでスキップ
メインコンテンツまでスキップ

Amazon MSKとClickHouseの統合

前提条件

次のことを前提とします:

Amazon MSKによるClickHouseの公式Kafkaコネクタ

接続詳細を集める

To connect to ClickHouse with HTTP(S) you need this information:

  • The HOST and PORT: typically, the port is 8443 when using TLS or 8123 when not using TLS.

  • The DATABASE NAME: out of the box, there is a database named default, use the name of the database that you want to connect to.

  • The USERNAME and PASSWORD: out of the box, the username is default. Use the username appropriate for your use case.

The details for your ClickHouse Cloud service are available in the ClickHouse Cloud console. Select the service that you will connect to and click Connect:

ClickHouse Cloud service connect button

Choose HTTPS, and the details are available in an example curl command.

ClickHouse Cloud HTTPS connection details

If you are using self-managed ClickHouse, the connection details are set by your ClickHouse administrator.


以下は、ClickHouseにHTTP(S)で接続するために必要な情報です:

  • HOSTとPORT: 通常、TLSを使用する場合はポートが8443、使用しない場合は8123です。

  • DATABASE NAME: デフォルトでは、defaultという名前のデータベースがあります。接続したいデータベースの名前を使用します。

  • USERNAMEとPASSWORD: デフォルトでは、ユーザー名はdefaultです。使用ケースに適したユーザー名を使用します。

ClickHouse Cloudサービスの詳細は、ClickHouse Cloudコンソールで確認できます。 接続するサービスを選択し、Connectをクリックしてください:

ClickHouse Cloud service connect button

HTTPSを選択すると、詳細はexample curlコマンドで確認できます。

ClickHouse Cloud HTTPS connection details

セルフマネージドのClickHouseを使用している場合は、接続の詳細がClickHouse管理者によって設定されます。

手順

  1. ClickHouse Connector Sink に精通していることを確認してください。
  2. MSKインスタンスを作成します。
  3. IAMロールを作成して割り当てる
  4. ClickHouse Connect Sink の リリースページ から jar ファイルをダウンロードします。
  5. Amazon MSKコンソールの カスタムプラグインページ にダウンロードした jar ファイルをインストールします。
  6. コネクタが公開のClickHouseインスタンスと通信する場合、インターネットアクセスを有効にする
  7. 設定にトピック名、ClickHouseインスタンスのホスト名、およびパスワードを提供します。
connector.class=com.clickhouse.kafka.connect.ClickHouseSinkConnector
tasks.max=1
topics=<topic_name>
ssl=true
security.protocol=SSL
hostname=<hostname>
database=<database_name>
password=<password>
ssl.truststore.location=/tmp/kafka.client.truststore.jks
port=8443
value.converter.schemas.enable=false
value.converter=org.apache.kafka.connect.json.JsonConverter
exactlyOnce=true
username=default
schemas.enable=false

パフォーマンス調整

パフォーマンスを向上させる一つの方法は、以下の設定をワーカー構成に追加し、バッチサイズとKafkaから取得するレコードの数を調整することです:

consumer.max.poll.records=[NUMBER OF RECORDS]
consumer.max.partition.fetch.bytes=[NUMBER OF RECORDS * RECORD SIZE IN BYTES]

使用する具体的な値は、希望するレコード数とレコードサイズによって異なります。たとえば、デフォルト値は次の通りです:

consumer.max.poll.records=500
consumer.max.partition.fetch.bytes=1048576

公式の KafkaAmazon MSK ドキュメントで、詳細(実装やその他の考慮事項)を見つけることができます。

MSK Connectのネットワークに関する注意事項

MSK ConnectがClickHouseに接続できるようにするため、MSKクラスターをインターネットアクセス用に接続されたプライベートNATがあるプライベートサブネット内に配置することをお勧めします。これを設定する方法は以下に示します。公共サブネットもサポートされていますが、ENIにElastic IPアドレスを常に割り当てる必要があるため推奨されません。詳細はAWSがこちらで提供しています

  1. プライベートサブネットを作成: VPC内に新しいサブネットを作成し、プライベートサブネットとして指定します。このサブネットはインターネットへの直接アクセスを持たないべきです。
  2. NATゲートウェイを作成: VPCの公共サブネットにNATゲートウェイを作成します。NATゲートウェイは、プライベートサブネット内のインスタンスがインターネットや他のAWSサービスに接続できるようにしますが、インターネットがそのインスタンスへの接続を開始するのを防ぎます。
  3. ルートテーブルを更新: インターネット向けのトラフィックをNATゲートウェイに向けるルートを追加します。
  4. セキュリティグループとネットワークACLの設定を確認: セキュリティグループネットワークACL(アクセス制御リスト) を設定して、ClickHouseインスタンスとの間で関連するトラフィックを許可します。
    1. ClickHouse Cloudの場合、セキュリティグループを設定してポート9440および8443の着信トラフィックを許可します。
    2. セルフホストのClickHouseの場合、設定ファイルに記載のポート(デフォルトは8123)で着信トラフィックを許可するようにセキュリティグループを設定します。
  5. セキュリティグループをMSKにアタッチ: NATゲートウェイにルーティングされた新しいセキュリティグループがMSKクラスターにアタッチされていることを確認します。