はじめに
トピックは、プロデューサーに渡す名前だけではありません。パーティションはイベントログを構成し、レプリカは保存されるコピーを表し、保持設定は保存済みレコードをどれだけの期間保持の対象とするかを決めます。読み取りの進行状況はコンシューマー側の情報であり、別の仕組みです。
2つのトピックを作成してメタデータを調べ、両方に明示的な保持方針を設定した後、片方だけを変更します。実際の削除を待つことも、ブローカー全体の設定を変更することもなく、トピック固有の上書き設定の意味を確かめられます。
用意された単一ブローカーは使用可能な状態で、2つのトピック名は以前の演習とは独立しています。基本的なターミナル操作ができれば十分で、Python や Java のプログラミングは不要です。この単一ブローカーの学習環境では、レプリカは1つが適切です。Terminal を使用してください。
2つのトピックを作成してメタデータを読む
このステップでは、明示的に指定した2通りのパーティション数を比較します。作業ディレクトリに移動します。
cd /home/labex/project
--bootstrap-server には、用意されたブローカーのアドレスを指定します。orders-retained はパーティションを2つ、orders-control は1つで作成します。この環境にはブローカーが1台あるため、どちらもレプリカを1つにします。
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic orders-retained --partitions 2 --replication-factor 1
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic orders-control --partitions 1 --replication-factor 1
トピックを一覧表示し、それぞれの詳細情報を保存します。シェルの > はローカルファイルを作成するか、既存の内容を置き換えます。
kafka-topics.sh --bootstrap-server localhost:9092 --list
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders-retained > /home/labex/project/output/orders-retained-description.txt
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders-control > /home/labex/project/output/orders-control-description.txt
cat /home/labex/project/output/orders-retained-description.txt
cat /home/labex/project/output/orders-control-description.txt
PartitionCount: 2 と 1 の違いと、両方の ReplicationFactor: 1 を確認してください。各パーティションにはリーダーの項目があります。リーダーブローカーの識別子はパーティション数ではなく、パーティションが2つあるからといってブローカーのマシンが2台あるわけではありません。
1つのトピックの複数のパーティションを、同じブローカーに配置できます。レプリケーション係数は、各パーティションのコピーをブローカー間でいくつ保持するかを表します。コンシューマーごとの独立したコピー数ではありません。次は、この2つのプロパティを変えずに保持期間を変更します。
各トピックに1日の保持期間を明示的に設定する
このステップでは、継承したデフォルト値とトピック固有の設定を区別します。kafka-configs.sh は設定リソースを管理します。--entity-type topics はトピックリソースを選び、--entity-name は変更対象のトピックを1つ選びます。通常、--describe はトピックの上書き設定を表示します。上書き設定がないからといって、ブローカーにデフォルト値がないわけではありません。
変更する前に、保持期間を設定するトピックを調べます。
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --describe
retention.ms はミリ秒単位の期間です。1日は 24 × 60 × 60 × 1000 = 86400000 ミリ秒です。--alter --add-config は、指定した名前の上書き設定を適用します。同じ明示的な方針を、両方のトピックに個別に設定します。
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --alter --add-config retention.ms=86400000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-control --alter --add-config retention.ms=86400000
実際の上書き設定を読み取り、確認結果を保存します。
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --describe > /home/labex/project/output/retained-one-day-config.txt
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-control --describe > /home/labex/project/output/control-one-day-config.txt
cat /home/labex/project/output/retained-one-day-config.txt
cat /home/labex/project/output/control-one-day-config.txt
それぞれのトピック名について retention.ms=86400000 を確認してください。クライアントによっては、設定の出所や機密性に関する情報も表示されます。これらの詳細や表示形式は異なる場合があります。
保持期間はブローカーの保存方針であり、コンシューマーが読み取った直後にレコードを消去する指示ではありません。レコードの経過時間とログセグメントのクリーンアップによって、削除の対象になるかどうかと削除のタイミングが決まります。この期間は、特定のメッセージが厳密にその時刻に消えることを保証しません。この演習ではクリーンアップを待たず、設定された上書き値を確認します。
片方のトピックだけを変更して適用範囲を確かめる
このステップでは、orders-retained の保持期間を2日にし、orders-control は1日のままにします。どのメタデータが変わるかを予想してください。保持対象のトピックの上書き値が変わり、両方のパーティション数とレプリケーション係数は変わらないはずです。
2日は 172800000 ミリ秒です。この値を、指定した保持対象のトピックだけに適用します。
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --alter --add-config retention.ms=172800000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --describe > /home/labex/project/output/retained-final-config.txt
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-control --describe > /home/labex/project/output/control-final-config.txt
cat /home/labex/project/output/retained-final-config.txt
cat /home/labex/project/output/control-final-config.txt
orders-retained では retention.ms=172800000、orders-control では retention.ms=86400000 になるはずです。ブローカーのアドレスが同じでも、トピックの上書き設定が全体に適用されるわけではありません。
保持対象のトピックの詳細情報をもう一度表示します。
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders-retained
パーティションは2つ、レプリカは1つのままのはずです。保持期間を変えても、新しいトピックの作成、パーティションの追加、コンシューマーの進行状況のコピー、イベントの消費は行われません。意図した変更と、もう一方のトピックが影響を受けていないことの両方を確認できました。次は、キーによって注文の識別情報とパーティションを結び付けます。
まとめ
パーティション数とレプリカ数を明示してトピックを作成し、メタデータを調べ、ミリ秒単位で保持期間の上書き設定を適用しました。一方のトピックの変更がもう一方に影響しないことを確認し、トピックの保存方針とコンシューマーの進行状況を区別しました。次は、キーを使って関連するイベントを振り分け、各パーティション内のオフセットを調べます。



