ksqlDB と Confluent Control Center の統合

Confluent Control Center により提供される ksqlDB ユーザーインターフェイスを使用してイベントストリーミングアプリケーションを開発することができます。Control Center では、Apache Kafka® トピックを作成し、ksqlDB クエリエディターにより永続的なクエリを作成することができます。Confluent Platform をインストールすると、デフォルトで ksqlDB サーバーが Control Center と統合されており、別のホスト上で実行されている他の ksqlDB サーバーインスタンスとやり取りするように Control Center を構成することができます。

Confluent Control Center の ksqlDB Create Stream インターフェイスのスクリーンショット。

ksqlDB および Control Center の構成設定

ksqlDB サーバーと Control Center の構成ファイルでプロパティを割り当てることにより、ksqlDB と Control Center の統合をセットアップします。

  • デフォルトでは、ksqlDB サーバーの構成ファイルは <path-to-confluent>/etc/ksqldb/ksql-server.properties にインストールされています。
  • デフォルトでは、Control Center の構成ファイルは <path-to-confluent>/etc/confluent-control-center/control-center.properties にインストールされています。

Confluent Platform の他のコンポーネントとセキュアに通信するように ksqlDB サーバーをセットアップすることができます。詳細については、「ksqlDB のセキュリティを構成する」を参照してください。

注釈

Control Center から ksqlDB クエリを実行するには、ksqlDB と Control Center の両方が、HTTP または HTTPS のいずれかで動作している必要があります。

ksqlDB および Control Center のネットワーク構成

ksqlDB と Control Center の間のネットワーク接続をセットアップするには、これらの構成設定を使用します。

  • ksqlDB サーバーの構成ファイルで、listeners プロパティに ksqlDB サーバーの REST API エンドポイントの IP アドレスを設定します。一般的な値は http://0.0.0.0:8088 および http://localhost:8088 です。
  • Control Center の構成ファイルで、confluent.controlcenter.ksql.<ksql-cluster-name>.url プロパティに、<ksql-cluster-name> により指定された ksqlDB のホスト名とリスナーポートを設定します。この設定は、通常の HTTP リクエストに関して Control Center が ksqlDB サーバーと通信する方法を指定します。詳細については、 ksqlDB 設定 を参照してください。
  • ksqlDB サーバーが外部で解決したりルーティングしたりできない内部 DNS を介して通信する場合は、Control Center の構成ファイルで confluent.controlcenter.ksql.<ksql-cluster-name>.advertised.url プロパティを設定します。この設定は、ウェブソケットリクエストに関してブラウザが ksqlDB サーバーと通信する方法を指定します。詳細については、 ksqlDB 設定 を参照してください。

ksqlDB サーバーと Confluent Control Center が同じホスト上で実行されている場合は、Confluent Platform のセットアップにより定義されたデフォルトの構成を使用できます。

ksqlDB と Control Center が異なるホスト上で実行されている場合

ksqlDB サーバーと Control Center が異なるホスト上で実行されている場合は、ksqlDB サーバーと Control Center が確実に通信できる構成を指定する必要があります。これは、ksqlDB サーバーと Control Center が以下のような場合に必要となります。

  • 異なるコンテナーで実行されている。
  • 異なる仮想マシンで実行されている。
  • 仮想プライベートネットワーク(VPN)を介して通信する。
  • 異なる URL を使用する。例として ksqlDB サーバーホストが ksqlDB サーバーのプライベート URL とは異なるパブリック URL を公開する場合など。

注釈

ksqlDB と Control Center が仮想プライベートネットワーク(VPN)を介して通信する場合は、Control Center がユーザーのクエリをプロキシしますが、クエリの結果は Control Center を介さずに ksqlDB サーバーから直接ストリーミングされてブラウザへ返されます。VPN を介する場合、アドバタイズされる URL は localhost ではありません。その代わりに、リモートサーバーのホスト名となります。

別個のホスト上で実行されている場合は、以下の構成プロパティを割り当てて ksqlDB サーバーと Control Center を統合します。

ksqlDB サーバーの構成

ksqlDB サーバーの構成ファイルで、listeners を設定してすべてのインターフェイスをバインドします。

listeners=http://0.0.0.0:8088

以下の CORS 設定を ksqlDB サーバーの構成ファイルに追加することにより、Confluent Control Center UI からの送信元間リクエストを受け付けるように ksqlDB を構成します。

access.control.allow.origin=*
access.control.allow.methods=GET,POST,HEAD
access.control.allow.headers=X-Requested-With,Content-Type,Accept,Origin,Authorization

Control Center の構成

Control Center 構成ファイルで confluent.controlcenter.ksql.<ksql-cluster-name>.url に ksqlDB サーバーホスト用の URL のリストを設定します。これらは、Control Center がインストールされているホストから到達可能であることが必要です。<ksql-cluster-name> は、ksqlDB クラスターを識別するために Control Center で使用する名前で置き換えます。

confluent.controlcenter.ksql.<ksql-cluster-name>.url=<internally-resolvable-hostname1>, <internally-resolvable-hostname2>, ...

また confluent.controlcenter.ksql.<ksql-cluster-name>.advertised.url には ksqlDB サーバーホストにより公開されるパブリック IP アドレスを設定します。これらは、外部的に利用可能な DNS を介してブラウザーが解決可能な URL のリストであることが必要です。

confluent.controlcenter.ksql.<ksql-cluster-name>.advertised.url=<externally-resolvable-hostname1>, <externally-resolvable-hostname2>, ...

Control Center の構成は ksqlDB サーバーの listeners の値と一致している必要があります。

curl コマンドを使用して、これらの URL が到達可能であるかどうかを確認します。デプロイによっては、2 つの異なるホストから確認する必要があります。

  • Control Center が実行されているホストから確認します。これは confluent.controlcenter.ksql.<ksql-cluster-name>.url の設定に関連しています。
  • ブラウザーが実行されているホストから確認します。これは confluent.controlcenter.ksql.<ksql-cluster-name>.advertised.url の設定に関連しています。

両方のホストで、以下のコマンドを実行して ksqlDB サーバーのクラスターが到達可能であることを確認します。hostname の値は confluent.controlcenter.ksql.<ksql-cluster-name>.url のリストおよび confluent.controlcenter.ksql.<ksql-cluster-name>.advertised.url 構成設定に含まれているホストのいずれかです。

curl http://<hostname>:8088/info \
{"KsqlServerInfo":{"version":"6.2.4","kafkaClusterId":"<ksql-cluster-name>","ksqlServiceId":"default_"}}%

注釈

ksqlDB の URL 設定でポートを指定する必要があります。たとえば、パブリック URL が http://ksql-server-677739697.us-east-1.elb.amazonaws.com:80 の場合は、必ずポート 80 を設定に含めます。そうしなければ、Control Center から ksqlDB サーバーへの接続は正しく行われません。

ksqlDB と Confluent Control Center の間のネットワーク接続の確認

ウェブブラウザーを使用して、アドバタイズされている URL の構成を確認します。ブラウザーから http://<ksql.advertised.url>/infoinfo エンドポイントへ到達可能であることを確認します。構成が正しくないためにブラウザーが ksqlDB サーバーホストの URL を解決できなければ、Websocket error when communicating with <ksql.advertised.url> というエラーが表示されます。

ksqlDB サーバーのネットワークバインディングを確認する

Control Center が ksqlDB サーバーインスタンスに接続しない場合は、ksqlDB サーバーホスト上でのネットワークバインディングを確認します。

sudo netstat -plnt|grep $(ps -ef|grep KsqlServerMain|grep -v grep|awk '')

ksqlDB サーバーが localhost のみにバインドされている場合、出力は以下のようになります。

tcp6 0 0 127.0.0.1:8088 :::* LISTEN 64383/java
tcp6 0 0 :::34791 :::* LISTEN 64383/java

0.0.0.0 がリストされていない場合は ksqlDB サーバーが外部接続を受け付けていません。ksql-server.properties ファイルに listeners=http://0.0.0.0:8088 を設定して ksqlDB サーバーを再起動します。