よくある質問

ksqlDB の利点について教えてください。

ksqlDB では、直感的で SQL ライクな構文を使用することにより、大規模な環境でリアルタイムに、Apache Kafka® のデータに対するクエリ、読み取り、書き込み、処理を行うことができます。ksqlDB は Java や Scala などのプログラミング言語に関する深い知識や経験を必要とせず、処理用のクラスター技術を別途インストールする必要がありません。

ksqlDB の技術的要件について教えてください。

ksqlDB に必要なものは以下のみです。

  1. Java 実行環境
  2. リアルタイムでのデータの読み書きを目的とする、Apache Kafka クラスターへのアクセス。クラスターはオンプレミスまたはクラウド内のどちらでもかまいません。ksqlDB は、Confluent Platform に含まれている Kafka 各バージョンを実行するクラスターだけではなく、バニラ Apache Kafka を実行しているクラスターでも動作します。

Apache Kafka の実行には Confluent Platform または Confluent Cloud の使用を推奨します。

ksqlDB は Apache ソフトウェア財団が所有しているのですか。

いいえ。ksqlDB は Confluent Inc. により、自社製品である Confluent Platform の一部として所有、管理されています。ただし ksqlDB は、Confluent Community ライセンスに基づきライセンスされています。

ksqlDB と Apache Kafka Streams API との比較

ksqlDB は Kafka Streams API を補完するものであり、実際に Kafka Streams アプリケーションを介してクエリを実行します。非常に柔軟なデプロイモデルを備えていることをはじめとして、いくつかの共通点があるため、コンテナー、VM、ベアメタルマシン、クラウドサービス、またはオンプレミス環境のいずれを選択しているかにかかわらず、技術的にも組織的にも既存の処理やツールに容易に統合することができます。

ksqlDB の主要な利点の 1 つは、ユーザーが Java や Scala でコードを開発する必要がないことです。これにより、ユーザーは SQL ライクなインターフェイスのみを活用して、ストリーミング ETL パイプラインの構築、継続的な業務リクエストへのリアルタイムでの対応、異常の特定などを行うことができます。処理ロジックが SQL により正常に表現できる場合は ksqlDB が非常に適しています。

本格的なストリーム処理アプリケーションには、Kafka Streams がより適しています。たとえば、データのストリームによって駆動される有限ステートマシンの実装は、SQL よりも Java や Scala などのプログラミング言語の方が容易に実現できます。Kafka Streams では DSL (関数型プログラミング API)または Processor API (命令型プログラミング API)のどちらかを選択したり、2 つを組み合わせたりすることもできます。

多くの技術と同様に、どちらにも技術的要件、ミッションクリティカル性、ユーザーのスキルセットに基づくそれぞれのスイートスポットがあります。

ksqlDB はバニラ Apache Kafka クラスターで動作しますか、それとも Confluent Platform に含まれている Kafka バージョンが必要ですか。

ksqlDB は、Confluent Platform に含まれている Kafka バージョンだけではなく、バニラ Apache Kafka クラスターでも動作します。

ksqlDB は Kafka の "厳密に 1 回" の処理セマンティクスをサポートしていますか。

はい。ksqlDB は "厳密に 1 回" の処理セマンティクスをサポートしています。したがって、マシンのクラッシュなどの障害に際しても正しい結果を算出します。

この動作は、processing.guarantee 設定で構成できます。詳細については、「"厳密に 1 回" のセマンティクスの有効化」を参照してください。

希望するデータフォーマット(JSON、Avro など)で ksqlDB を使用できますか。

ksqlDB は現在、以下のフォーマットをサポートしています。

  • DELIMITED(コンマ区切り値など)
  • JSON
  • Avro メッセージ値はサポートされています。Avro キーはまだサポートされていません。Schema Registry および ksql.schema.registry.url を ksqlDB サーバー構成ファイルに含める必要があります。詳細については、「ksqlDB を Avro 用に構成する」を参照してください。
  • KAFKA(例: Kafka の標準の LongSerializer を使用してシリアル化される BIGINT)。

詳細については、「シリアル化フォーマット」を参照してください。

ksqlDB は ANSI SQL と完全互換ですか。

ksqlDB は ANSI SQL から生じた方言です。ストリーミングデータの処理を目的としているため、いくつかの違いがあります。たとえば ANSI SQL には、5 分単位で複数のウィンドウにグループ化されたデータを集約するというユースケースでの "ウィンドウ化" という概念はありませんが、これはストリーミングの世界では一般的に必要とされる機能です。

ksqlDB 環境はどのような方法でシャットダウンしますか。

以下の手順で ksqlDB CLI を終了します。

ksql> exit

Confluent CLI で実行している場合は confluent stop コマンドを使用します。

confluent stop ksql

Docker コンテナーで ksqlDB を実行している場合は cp-ksqldb-server コンテナーを停止します。

docker stop <cp-ksqldb-server-container-name>

ksqlDB をシステムサービスとして実行している場合は systemctl stop コマンドを使用します。

sudo systemctl stop confluent-ksql

Confluent Platform のシャットダウンの詳細については、「Confluent Platform のインストールおよびアップグレード」を参照してください。

ターゲットの Kafka クラスターはどのような方法で構成しますか。

ksqlDB サーバーを構成する」で bootstrap.servers を定義します。

既存の ksqlDB クラスターへはどのような方法で ksqlDB サーバーを追加しますか。

ライブ運用中に ksqlDB サーバーを追加または削除することができます。同じ Kafka クラスター(bootstrap.servers)および同じ ksqlDB サービス ID(ksql.service.id)を使用するように構成された ksqlDB サーバーが所定の ksqlDB クラスターを形成します。

ksqlDB サーバーを既存の ksqlDB クラスターに追加するには、追加先の ksqlDB クラスターと同じ bootstrap.servers および ksql.service.id 設定を使用してサーバーを構成する必要があります。詳細については、「ksqlDB サーバーを構成する」および「ksqlDB の拡張」を参照してください。

本稼働環境用の ksqlDB サーバーをロックダウンして対話式クライアントによるアクセスを防ぐには、どのような方法がありますか。

ksql.queries.file または --queries-file コマンドラインフラグを使用することにより、事前に定義された一連のクエリを実行するようにサーバーを構成することができます。詳細については、「ksqlDB サーバーを構成する」を参照してください。

Avro データを使用して Confluent Schema Registry と統合するには、どのような方法がありますか。

ksqlDB サーバー構成で、ksql.schema.registry.url プロパティを使用して Schema Registry をポイントするように構成します(「ksqlDB を Avro 用に構成する」を参照してください)。

重要

  • ksqlDB で Avro データを使用するには、Schema Registry をインストールしておくことが必要です。これはデフォルトで Confluent Platform に含まれています。
  • Avro メッセージ値はサポートされています。Avro キーはまだサポートされていません。

ksqlDB はどのような方法でスケールアウトできますか。

並列処理の最大数は、パーティションの数によって異なります。

  • スケールアウトするには、同じ構成を持つ ksqlDB サーバーを追加で起動します。これはライブ運用中に行うことができます。「既存の ksqlDB クラスターへはどのような方法で ksqlDB サーバーを追加しますか。」を参照してください。
  • スケールインするには、実行中の ksqlDB サーバーの中から目的のサーバーを停止します。ただし少なくとも 1 台のサーバーは実行中のままにしておきます。これはライブ運用中に行うことができます。残りのサーバーには、停止したサーバーから作業を引き継ぐのに十分な容量が必要です。

ちなみに

アイドル状態のサーバーは少量のリソースを消費します。たとえば 10 台の ksqlDB サーバーがあり、パーティションが 2 個の入力トピックに対してクエリを実行している場合、実際の作業を実行するのは 2 台のサーバーのみで、他の 8 台は "idle" のクエリを実行することになります。

ksqlDB は SSL 経由で Apache Kafka クラスターに接続できますか。

はい。内部的には ksqlDB は Kafka の標準のコンシューマーとプロデューサーを使用します。Kafka に ksqlDB を安全に接続する手順は、他の任意のアプリを Kafka に接続する場合と同様です。詳細については、「セキュアな Apache Kafka クラスター用に ksqlDB を構成する」を参照してください。

ksqlDB は SSL 経由で Apache Kafka クラスターに接続し、SASL を使用して認証できますか。

はい。内部的には ksqlDB は Kafka の標準のコンシューマーとプロデューサーを使用します。Kafka に ksqlDB を安全に接続する手順は、他の任意のアプリを Kafka に接続する場合と同様です。

詳細については、「Kafka の認証を構成する」を参照してください。

ksqlDB は Confluent Cloud で動作しますか。

はい。クラウド上で実行している Kafka クラスターに対して ksqlDB を実行するのは非常に簡単です。詳細については、「ksqlDB の Confluent Cloud への接続」を参照してください。

また、Confluent Cloud でフルマネージド型 KSQL を実行することもできます。詳細については、「Confluent Cloud ksqlDB でストリーミングクエリを作成する」を参照してください。

ksqlDB は、Kafka ACL を使用して保護されている Apache Kafka クラスターで動作しますか。

はい。詳細については、「Kafka ACL による ksqlDB の認可を構成する」を参照してください。

ksqlDB は HTTPS Confluent Schema Registry で動作しますか。

はい。ksqlDB は HTTPS 経由で Confluent Schema Registry と通信するように構成できます。詳細については、「セキュアな Confluent Schema Registry 用に ksqlDB を構成する」を参照してください。

Kafka に対するデータの読み書きはどの ksqlDB クエリが行いますか。

SHOW STREAMS および EXPLAIN <query> ステートメントは ksqlDB クライアントが接続されている ksqlDB サーバーに対して実行されます。Kafka とは直接通信しません。

CREATE STREAM WITH <topic> および CREATE TABLE WITH <topic> は、メタデータを ksqlDB コマンドトピックに書き込みます。

CREATE STREAM AS SELECT および CREATE TABLE AS SELECT に基づく永続的なクエリは、Kafka のトピックに対して読み書きを行います。

ステートレスな SELECT に基づく非永続的なクエリは、SELECT … FROM foo WHERE … など、Kafka のトピックからの読み取りのみを行います。

ステートフルな非永続的なクエリは、COUNT および JOIN など、Kafka に対して読み書きを行います。Ctrl + C キーを押してクエリを終了すると、Kafka 内のデータは自動的に削除されます。

ksqlDB サーバーヘルスはどのような方法で確認しますか。

ps コマンドを使用して ksqlDB サーバーの処理が実行中であるかを確認します。以下はその例です。

ps -aux | grep ksql

出力は以下のようになります。

jim       2540  5.2  2.3 8923244 387388 tty2   Sl   07:48   0:33 /usr/lib/jvm/java-8-oracle/bin/java -cp /home/jim/confluent-5.0.0/share/java/monitoring-interceptors/* ...

JVM の処理状態が Sl または Ssl ではない場合は、ksqlDB サーバーがダウンしている可能性があります。

ksqlDB サーバーを Docker コンテナーで実行している場合は、 docker ps または docker-compose ps コマンドを実行し、 ksql-server コンテナーのステータスが Up であることを確認します。docker logs <ksql-server-container-id> を実行することにより、コンテナー内の処理のヘルスを確認します。

接続している ksqlDB サーバーの実行時統計情報を確認します。
  • SHOW STREAMS または SHOW TABLES を実行し、続いて DESCRIBE <stream|table> EXTENDED を実行します。
  • SHOW QUERIES を実行し、続いて EXPLAIN <query> を実行します。

ksqlDB REST API は "server info" リクエスト(http://&lt;ksql-server-url&gt;/info など)をサポートしていますが、これは ksqlDB のバージョンなどの情報を返します。詳細については、「REST API のインデックス」を参照してください。

トピックの自動作成をオフにすると、どうなりますか。

トピックの自動作成を無効にしても、ksqlDB および Kafka Streams アプリケーションは稼働し続けます。ksqlDB および Kafka Streams アプリケーションは Admin Client を使用するため、トピックの作成は続行されます。