Amazon MSK と ClickHouse の統合
前提条件
以下を前提としています:
- あなたが ClickHouse コネクタ Sink、Amazon MSK、MSK コネクタに精通していること。Amazon MSK 開始ガイドとMSK コネクトガイドを推奨します。
- MSK ブローカーが公開アクセス可能であること。開発者ガイドの公開アクセスセクションを参照してください。
ClickHouse の公式 Kafka コネクタと Amazon MSK
接続の詳細を集める
HTTP(S) を使用して ClickHouse に接続するには、以下の情報が必要です:
HOST と PORT: 通常、TLS を使用する場合のポートは 8443、TLS を使用しない場合は 8123 です。
データベース名: デフォルトで
default
という名前のデータベースがありますが、接続したいデータベースの名前を使用してください。ユーザー名とパスワード: デフォルトでユーザー名は
default
です。使用ケースに適したユーザー名を使用してください。
ClickHouse Cloud サービスの詳細は、ClickHouse Cloud コンソールで確認できます。 接続するサービスを選択し、接続 をクリックします:
HTTPS を選択すると、サンプルの curl
コマンドで詳細が確認できます。
セルフマネージドの ClickHouse を使用している場合、接続の詳細は ClickHouse 管理者によって設定されます。
ステップ
- ClickHouse コネクタ Sinkを理解していることを確認してください。
- MSK インスタンスを作成する。
- IAM ロールを作成して割り当てる。
- ClickHouse Connect Sink のリリースページから
jar
ファイルをダウンロードします。 - Amazon MSK コンソールのカスタムプラグインページでダウンロードした
jar
ファイルをインストールします。 - コネクタが公開 ClickHouse インスタンスと通信する場合は、インターネットアクセスを有効にします。
- 設定でトピック名、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
パフォーマンスチューニング
パフォーマンスを向上させるワンステップとして、worker 設定に以下を追加して、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
詳細情報(実装やその他の考慮事項について)は、公式の Kafka および Amazon MSK ドキュメントで確認できます。
MSK Connect のネットワーキングに関する注意事項
MSK Connect が ClickHouse に接続するために、MSK クラスターをプライベートサブネットに配置し、プライベート NAT を使用してインターネットアクセスを確保することを推奨します。これを設定する方法は以下に記載されています。パブリックサブネットもサポートされていますが、Elastic IP アドレスを ENI に常に割り当てる必要があるため、推奨されません。詳しくは AWS の詳細をご覧ください。
- プライベートサブネットの作成: VPC 内に新しいサブネットを作成し、プライベートサブネットとして指定します。このサブネットにはインターネットへの直接アクセスがありません。
- NAT ゲートウェイの作成: VPC のパブリックサブネットに NAT ゲートウェイを作成します。NAT ゲートウェイは、プライベートサブネットのインスタンスがインターネットや他の AWS サービスと接続できるようにしますが、インターネットからこれらのインスタンスへの接続を防ぎます。
- ルートテーブルの更新: インターネットに向かうトラフィックを NAT ゲートウェイに送るルートを追加します。
- セキュリティグループとネットワーク ACL の設定: セキュリティグループとネットワーク ACL(アクセス制御リスト)を構成し、ClickHouse インスタンスへの関連するトラフィックを許可します。
- ClickHouse Cloud の場合、セキュリティグループを構成してポート 9440 および 8443 でのインバウンドトラフィックを許可します。
- セルフマネージドの ClickHouse の場合、セキュリティグループが設定ファイルのポート(デフォルトは 8123)でのインバウンドトラフィックを許可するように構成します。
- MSK にセキュリティグループをアタッチ: これらの新しいセキュリティグループを NAT ゲートウェイにルートされた状態で MSK クラスターにアタッチします。