10.3. トピック変更の処理


Topic Operator がトピックへの変更をどのように処理するかは、トピック管理のモード によって異なります。

  • 一方向トピック管理の場合、設定の変更は KafkaTopic リソースから Kafka トピックへの一方向のみに行われます。KafkaTopic リソースの外部で管理される Kafka トピックへの変更はすべて元に戻されます。
  • 双方向のトピック管理の場合、設定の変更は Kafka トピックと KafkaTopic リソースの間で両方向に同期されます。互換性のない変更では Kafka 設定が優先され、それに応じて KafkaTopic リソースが調整されます。

10.3.1. 双方向トピック管理のためのトピックストア

双方向のトピック管理の場合、Topic Operator は、唯一の信頼できる情報源がない場合でもトピックへの変更を処理できます。KafkaTopic リソースと Kafka トピックは別々に変更される可能性があります。特に Topic Operator が動作していない場合は、変更をリアルタイムで観察することが常に可能であるとは限りません。これに対処するために、Topic Operator は、各トピックに関するトピック設定情報を保存するトピックストアを維持します。Kafka クラスターと OpenShift の状態をトピックストアと比較して、同期に必要な変更を判断します。この評価は、起動中および Topic Operator がアクティブである間、定期的に行われます。

たとえば、Topic Operator が非アクティブで、my-topic という名前の新しい KafkaTopic が作成された場合、再起動時に Topic Operator はトピックストアに my-topic が存在しないことを認識します。KafkaTopic が最後の操作の後に作成されたことを認識します。その結果、Topic Operator は対応する Kafka トピックを生成し、メタデータをトピックストアに保存します。

トピックストアを使用すると、Topic Operator は、変更に互換性がある限り、Kafka トピックと KafkaTopic リソースの両方でトピック設定が変更される状況を管理できます。Kafka トピック設定が更新されるか、KafkaTopic カスタムリソースに変更が加えられると、変更に互換性がある限り、Kafka クラスターとの調整後にトピックストアが更新されます。

トピックストアは、Kafka トピックを使用して状態を永続化する Kafka Streams のキーバリューメカニズムを基にしています。トピックメタデータはインメモリーでキャッシュされ、Topic Operator 内にてローカルでアクセスされます。ローカルのインメモリーキャッシュに適用される操作からの更新は、ディスク上のバックアップトピックストアに永続化されます。トピックストアは、Kafka トピックまたは OpenShift KafkaTopic カスタムリソースからの更新と継続的に同期されます。操作は、このような方法で設定されたトピックストアで迅速に処理されますが、インメモリーキャッシュがクラッシュした場合は、永続ストレージから自動的にデータが再入力されます。

内部トピックは、トピックストアでのトピックメタデータの処理をサポートします。

__strimzi_store_topic
トピックメタデータを保存するための入力トピック
__strimzi-topic-operator-kstreams-topic-store-changelog
圧縮されたトピックストア値のログの維持
警告

これらのトピックは、Topic Operator の実行に不可欠であるため、削除しないでください。

10.3.2. ZooKeeper からトピックストアへのトピックメタデータの移行

Streams for Apache Kafka の以前のリリースでは、トピックのメタデータが ZooKeeper に保存されていました。トピックストアによってその必要がなくなるため、メタデータは Kafka クラスターに取り込まれ、Topic Operator の制御下に置かれます。

Streams for Apache Kafka 2.7 にアップグレードすると、Topic Operator によるトピックストア制御への以降がシームレスに行われます。メタデータは ZooKeeper から検出および移行され、古いストアは削除されます。

10.3.3. ZooKeeper を使用してトピックのメタデータを保存する Streams for Apache Kafka バージョンにダウングレードする

トピックメタデータの保存に ZooKeeper を使用する 1.7 より前のバージョンの Streams for Apache Kafka に戻す場合も、Cluster Operator を前のバージョンにダウングレードしてから、Kafka ブローカーおよびクライアントアプリケーションを標準として前の Kafka バージョンにダウングレードします。

ただし、Kafka クラスターのブートストラップアドレスを指定して、kafka-topics コマンドを使用してトピックストア用に作成されたトピックを削除する必要もあります。以下に例を示します。

oc run kafka-admin -ti --image=registry.redhat.io/amq-streams/kafka-37-rhel9:2.7.0 --rm=true --restart=Never -- ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi-topic-operator-kstreams-topic-store-changelog --delete && ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi_store_topic --delete

このコマンドは、Kafka クラスターへのアクセスに使用されるリスナーおよび認証のタイプに対応している必要があります。

Topic Operator は、Kafka のトピックの状態から ZooKeeper トピックメタデータを再構築します。

10.3.4. トピックの自動作成

アプリケーションは、Kafka クラスター内のトピックの自動作成をトリガーできます。デフォルトでは、Kafka ブローカー設定 auto.create.topics.enabletrue に設定されており、アプリケーションが存在しないトピックから生成または消費しようとしたときに、ブローカーがトピックを自動的に作成できるようになります。アプリケーションは、Kafka AdminClient を使用してトピックを自動的に作成する場合もあります。アプリケーションが KafkaTopic リソースとともにデプロイされる場合、Topic Operator が KafkaTopic に反応する前に、クラスター内でトピックの自動作成が行われる可能性があります。

双方向のトピック管理の場合、Topic Operator はトピックと KafkaTopic リソース間の変更を同期します。

一方向トピック管理を使用している場合、これは、アプリケーションのデプロイメント用に作成されたトピックが、最初はデフォルトのトピック設定で作成されることを意味する可能性があります。Topic Operator がアプリケーションデプロイメントに含まれる KafkaTopic リソース仕様に基づいてトピックを再設定しようとすると、必要な設定変更が許可されていないため、操作が失敗する可能性があります。たとえば、変更がトピックパーティションの数を減らすことを意味する場合です。このため、一方向トピック管理を使用する場合は、Kafka クラスター設定で auto.create.topics.enable を無効にすることを推奨します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.