Streams アプリケーションのトピックの管理

Kafka Streams アプリケーションは、継続的に Apache Kafka® トピックから読み取り、読み取ったデータを処理して、処理結果を再び Kafka トピックに書き込みます。アプリケーションでは、他の Kafka トピックが Kafka ブローカーに自動作成される場合もあります。たとえば、ステートストアの changelog トピックがこれに該当します。このセクションでは、これらのトピックの種類の違いと、トピックおよびアプリケーションの管理方法について説明します。

Kafka Streams では、 ユーザートピック内部トピック が区別されます。

ユーザートピック

ユーザートピックは、アプリケーションの外部に存在し、アプリケーションによって読み書きされるトピックです。以下の種類があります。

入力トピック
アプリケーションのトポロジーのソースプロセッサーを通じて指定されるトピック。たとえば、StreamsBuilder#stream()StreamsBuilder#table()Topology#addSource() で指定されます。
出力トピック
アプリケーションのトポロジーのシンクプロセッサーを通じて指定されるトピック。たとえば、KStream#to()KTable.to()Topology#addSink() で指定されます。
中間トピック
アプリケーションのトポロジーで、入力トピックと出力トピックの両方の性質を持つトピック。

ユーザートピックは、事前に手動で作成して管理する必要があります(トピックツール を使用できます)。ユーザートピックを複数のアプリケーションで共有して読み書きを行う場合は、アプリケーションユーザーがトピック管理を調整する必要があります。ユーザートピックを集中管理する場合は、アプリケーションユーザーが自分でトピックを管理する必要はなく、トピックへのアクセスを取得するだけです。

注釈

トピックの自動作成機能は、次の理由から、ブローカーでのユーザートピックの作成には使用しないでください。

  • トピックの自動作成は Kafka クラスターで無効にされている場合があります。
  • 自動作成では、レプリケーション係数などのデフォルトのトピック設定が自動的に適用されます。これらのデフォルト設定は、出力トピックによっては適していない場合があります(Kafka ブローカー構成auto.create.topics.enable=true など)。

内部トピック

内部トピックは、Kafka Streams アプリケーションの実行中に内部で使用されるものです。たとえば、ステートストアの changelog トピックがあります。これらのトピックはアプリケーションによって作成され、そのストリームアプリケーションによってのみ使用されます。

注釈

ブローカーの視点から見た場合、内部トピックは __consumer_offsets__transaction_state などの "ブローカー内部" のトピックとは異なり、通常のトピックです。

Kafka ブローカーでセキュリティが有効になっている場合は、基盤となるクライアントに管理アクセス許可を付与して、内部トピックセットを作成できるようにする必要があります。詳細については、「Streams のセキュリティ」を参照してください。

注釈

内部トピック名は <application.id>-<operatorName>-<suffix> という命名規則に従いますが、将来のリリースでもこの規則が使用されるとは限りません。内部トピックのパラメーターを構成する方法の詳細については、「内部トピックパラメーター」を参照してください。

トピックの自動作成を無効にしても、Kafka Streams アプリケーションは機能し続けます。Kafka Streams アプリケーションは管理クライアントを使用するため、内部トピックは引き続き作成されます。トピックの自動作成が有効な場合でも、内部トピックは StreamsConfig の指定に従って、特定の数のパーティションとレプリケーション係数を使用して作成されます。

注釈

このウェブサイトには、Apache License v2 の条件に基づいて Apache Software Foundation で開発されたコンテンツが含まれています。