10.5. Kafka ストレージの設定
Streams for Apache Kafka は、さまざまな Kafka ストレージオプションをサポートしています。次の基本タイプから選択できます。
- 一時ストレージ
- 一時ストレージは一時的なものであり、Pod の実行中にのみ保持されます。Pod が削除されるとデータは失われますが、高可用性環境ではデータを回復できます。その一時的な性質のため、一時ストレージは開発およびテスト環境にのみ推奨されます。
- 永続ストレージ
- 永続ストレージは、Pod の再起動やシステムの中断があってもデータが保持されるため、実稼働環境に最適です。
JBOD (Just a Bunch of Disks) ストレージを使用すると、複数のディスクまたはボリュームを一時ストレージまたは永続ストレージとして使用するように Kafka クラスターを設定できます。
JBOD ストレージ (複数のボリューム)
JBOD ストレージを指定する場合でも、各ディスクに一時ボリュームと永続ボリュームのどちらを使用するか決定する必要があります。その時点では 1 つのボリュームのみ使用したとしても、JBOD を使用する場合は必要に応じて後からボリュームを追加して拡張できるため、JBOD の使用が推奨されます。
Kafka クラスターをデプロイした後は、ストレージタイプ (永続ストレージ、一時ストレージ、JBOD ストレージ) は変更できません。ただし、JBOD ストレージから異なるタイプのボリュームを追加または削除することは可能です。また、新しいストレージ仕様を持つノードプールを作成して移行することもできます。
階層型ストレージ (アドバンスド)
現在は早期アクセス機能として利用可能な階層型ストレージでは、パフォーマンスとコスト特性の異なるさまざまなストレージタイプを組み合わせることで、さらに柔軟に Kafka データを管理できます。これにより、Kafka は古いデータを安価な長期ストレージ (オブジェクトストレージなど) にオフロードし、頻繁にアクセスされる最近のデータを高価な高速ストレージ (ブロックストレージなど) に保持できます。
階層型ストレージはアドオン機能です。Kafka ノードのストレージ (一時、永続、または JBOD) を設定した後、クラスターレベルで階層型ストレージを設定し、それをトピックレベルの remote.storage.enable 設定を使用して特定のトピックに対して有効にできます。
10.5.1. ストレージに関する考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
Streams for Apache Kafka が効果的に動作するには効率的なデータストレージが不可欠であり、ブロックストレージが強く推奨されます。Streams for Apache Kafka はブロックストレージでのみテストされており、NFS などのファイルストレージソリューションが動作することは保証されていません。
OpenShift でサポートされている一般的なブロックストレージタイプは次のとおりです。
クラウドベースのブロックストレージソリューション:
- Amazon EBS (AWS 用)
- Azure Disk Storage (Microsoft Azure 用)
- Persistent Disk (Google Cloud 用)
- ローカル永続ボリューム を使用した永続ストレージ (ベアメタルデプロイメント用)
- ファイバーチャネルや iSCSI などのプロトコルでアクセスされるストレージエリアネットワーク (SAN) ボリューム
Streams for Apache Kafka には OpenShift の raw ブロックボリュームは必要ありません。
10.5.1.1. ファイルシステム リンクのコピーリンクがクリップボードにコピーされました!
Kafka は、メッセージの保存にファイルシステムを使用します。Streams for Apache Kafka は、Kafka で一般的に使用される XFS および ext4 ファイルシステムと互換性があります。ファイルシステムを選択して設定するときは、デプロイメントの基盤となるアーキテクチャーと要件を考慮してください。
詳細は、Kafka ドキュメントの Filesystem Selection を参照してください。
10.5.1.2. ディスク使用量 リンクのコピーリンクがクリップボードにコピーされました!
ソリッドステートドライブ (SSD) は必須ではありませんが、複数のトピックに対してデータが非同期的に送受信される大規模なクラスターで Kafka のパフォーマンスを向上させることができます。
Kafka には組み込みのデータレプリケーション機能があるため、レプリケートされたストレージは必要ありません。
10.5.2. KRaft モードでの Kafka ストレージの設定 リンクのコピーリンクがクリップボードにコピーされました!
KafkaNodePool カスタムリソースの storage プロパティーを使用して、KRaft モードで Kafka のデプロイメント用ストレージを設定します。
10.5.2.1. 一時ストレージの設定 リンクのコピーリンクがクリップボードにコピーされました!
一時ストレージを使用するには、ストレージタイプとして ephemeral を指定します。
一時ストレージの設定例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: my-node-pool
labels:
strimzi.io/cluster: my-cluster
spec:
replicas: 3
roles:
- broker
storage:
type: ephemeral
# ...
一時ストレージは、Pod がノードに割り当てられたときに作成される emptyDir ボリュームを使用します。sizeLimit プロパティーを使用して、emptyDir ボリュームのサイズを制限できます。
Kafka ブローカーがログディレクトリー用に使用する一時ボリュームは、/var/lib/kafka/data/kafka-log<pod_id> にマウントされます。
一時ストレージは、レプリケーション係数が 1 の Kafka トピックには適していません。
一時ストレージの設定オプションの詳細は、EphemeralStorage スキーマリファレンス を参照してください。
10.5.2.2. Configuring persistent storage リンクのコピーリンクがクリップボードにコピーされました!
永続ストレージを使用するには、ストレージタイプとして次のいずれかを指定します。
-
1 つの永続ボリューム用の
persistent-claim -
Kafka クラスター内における複数の永続ボリューム用の
jbod(実稼働環境の Kafka に推奨)
永続ストレージの設定例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: my-node-pool
labels:
strimzi.io/cluster: my-cluster
spec:
replicas: 3
roles:
- broker
storage:
type: persistent-claim
size: 500Gi
deleteClaim: true
# ...
Streams for Apache Kafka は、永続ボリューム要求 (PVC) を使用して永続ボリューム (PV) 上のストレージを要求します。PVC は、要求されたストレージ基準を満たす PV にバインドします。その際に、基盤となるストレージインフラストラクチャーを認識する必要はありません。
Kafka Pod 用に作成された PVC は、data-<kafka_cluster_name>-<pool_name>-<pod_id> の命名規則に従い、Kafka ログの永続ボリュームは /var/lib/kafka/data/kafka-log<pod_id> にマウントされます。
ストレージ設定で、カスタムストレージクラス (StorageClass) とボリュームセレクターを指定することもできます。
クラスとセレクターの設定例
# ...
storage:
type: persistent-claim
size: 500Gi
class: my-storage-class
selector:
hdd-type: ssd
deleteClaim: true
# ...
ストレージクラスはストレージプロファイルを定義し、そのプロファイルに基づき永続ボリューム (PV) を動的にプロビジョニングします。これは、ストレージクラスが、異なるアベイラビリティーゾーンやデータセンターに制限されている場合などに便利です。ストレージクラスが指定されていない場合は、OpenShift クラスターのデフォルトのストレージクラスが使用されます。セレクターは、ソリッドステートドライブ (SSD) ボリュームなどの特定の機能を提供する永続ボリュームを指定します。
永続ストレージ設定オプションの詳細は、PersistentClaimStorage スキーマリファレンス を参照してください。
10.5.2.3. 永続ボリュームのサイズ変更 リンクのコピーリンクがクリップボードにコピーされました!
永続ボリュームのサイズは、ストレージインフラストラクチャーによってサポートされている限り、size ストレージプロパティーを変更することでデータ損失のリスクを伴うことなく変更できます。Streams for Apache Kafka は、ストレージのサイズを変更する設定の更新に従って、ストレージインフラストラクチャーに変更を指示します。
ストレージ拡張は、persistent-claim ボリュームを使用する Streams for Apache Kafka クラスターでサポートされています。OpenShift では、永続ボリュームのサイズを縮小することはサポートされていません。OpenShift での永続ボリュームのサイズ変更に関する詳細は、Resizing Persistent Volumes using Kubernetes を参照してください。
size プロパティーの値を増やすと、OpenShift は Cluster Operator からの要求に応じて、選択された永続ボリュームの容量を増やします。サイズ変更が完了すると、サイズ変更された永続ボリュームを使用するすべての Pod が Cluster Operator によって再起動されます。これは自動的に行われます。
この例では、ボリュームを 2000Gi に増やしています。
ボリュームサイズを 2000Gi に増やす Kafka 設定
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: my-node-pool
labels:
strimzi.io/cluster: my-cluster
spec:
replicas: 3
roles:
- broker
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 2000Gi
deleteClaim: false
- id: 1
type: persistent-claim
size: 2000Gi
deleteClaim: false
- id: 2
type: persistent-claim
size: 2000Gi
deleteClaim: false
# ...
返される PV の情報で変更を検証します。
oc get pv
PV のストレージ容量
NAME CAPACITY CLAIM
pvc-0ca459ce-... 2000Gi my-project/data-my-cluster-my-node-pool-2
pvc-6e1810be-... 2000Gi my-project/data-my-cluster-my-node-pool-0
pvc-82dc78c9-... 2000Gi my-project/data-my-cluster-my-node-pool-1
出力には、ブローカー Pod に関連付けられた各 PVC の名前が表示されます。
ストレージの 削減 は、ブローカーごとに複数のディスクを使用する場合にのみ可能です。ディスク上のすべてのパーティションを同じブローカー内の他のボリューム (ブローカー内) または同じクラスター内の他のブローカー (クラスター内) に移動した後、ディスクを削除できます。
10.5.2.4. JBOD ストレージの設定 リンクのコピーリンクがクリップボードにコピーされました!
JBOD ストレージを使用するには、ストレージタイプとして jbod を指定し、JBOD ボリュームの設定を追加します。JBOD ボリュームには永続ボリュームと一時ボリュームがあり、各タイプには設定オプションと制約が適用されます。
JBOD ストレージの設定例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: my-node-pool
labels:
strimzi.io/cluster: my-cluster
spec:
replicas: 3
roles:
- broker
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
- id: 1
type: persistent-claim
size: 100Gi
deleteClaim: false
- id: 2
type: persistent-claim
size: 100Gi
deleteClaim: false
# ...
JBOD ボリューム用の PVC は、data-<volume_id>-<kafka_cluster_name>-<pool_name>-<pod_id> の命名規則を使用して作成され、ログディレクトリーに使用される JBOD ボリュームは /var/lib/kafka/data-<volume_id>/kafka-log<pod_id> にマウントされます。
10.5.2.5. JBOD ストレージに対するボリュームの追加または削除 リンクのコピーリンクがクリップボードにコピーされました!
JBOD ボリュームの作成後にボリューム ID を変更することはできませんが、ボリュームを追加または削除することはできます。過去に使用されて削除された id の volumes 配列に新しいボリュームを追加する場合は、以前使用した PersistentVolumeClaims が削除されていることを確認してください。
ボリュームを追加または削除するときにパーティションを再度割り当てるには、Cruise Control を使用します。ブローカー内ディスクバランスの詳細は、「リバランスのオプションの調整」 を参照してください。
10.5.2.6. KRaft メタデータログストレージの設定 リンクのコピーリンクがクリップボードにコピーされました!
KRaft モードでは、各ノード (ブローカーとコントローラーを含む) は、Kafka クラスターのメタデータログのコピーをデータボリュームの 1 つに保存します。デフォルトでは、ログは最小 ID を持つボリュームに保存されますが、kraftMetadata プロパティーを使用して別のボリュームを指定することもできます。
コントローラーのみのノードの場合、ストレージはメタデータログ専用になります。ログは常に 1 つのボリュームに保存されるため、複数のボリュームを持つ JBOD ストレージを使用しても、パフォーマンスが向上したり、使用可能なディスク領域が増えたりすることはありません。
対照的に、ブローカーノードや、ブローカーとコントローラーのロールを兼ね備えたノードは、メタデータログとパーティションレプリカデータの両方に同じボリュームを共有できるため、ディスクの使用率が最適化されます。また、JBOD ストレージを使用することもできます。この場合、1 つのボリュームはメタデータログとパーティションレプリカデータ用に共有され、追加のボリュームはパーティションレプリカデータ専用に使用されます。
メタデータログを保存するボリュームを変更すると、クラスターノードのローリングアップデートがトリガーされ、古いログが削除され、指定された場所に新しいログが作成されます。kraftMetadata が指定されていない場合、より小さい ID を持つ新しいボリュームを追加すると、メタデータログの更新と再配置も要求されます。
ID 1 のボリュームを使用して KRaft メタデータを保存する JBOD ストレージ設定の例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: pool-a
# ...
spec:
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
- id: 1
type: persistent-claim
size: 100Gi
kraftMetadata: shared
deleteClaim: false
# ...
10.5.2.7. ノードプールを使用したストレージの管理 リンクのコピーリンクがクリップボードにコピーされました!
通常、Streams for Apache Kafka でのストレージ管理は簡単で、セットアップ時の変更はほとんど不要です。ただし、場合によっては、ストレージ設定を変更する必要があります。ノードプールを使用すると、新しいストレージ要件を指定する個別のノードプールを設定できるため、このプロセスが簡素化されます。
この手順では、3 つのノードを含む pool-a というノードプールのストレージを作成および管理します。これらの手順では、新しいノードプールを追加するためのスケーリング操作が必要です。現時点でスケーリングが可能なのは、専用ブローカーとして実行されるノードを含む、ブローカー専用ノードプールのみです。
使用する永続ストレージのタイプを定義するストレージクラス (volumes.class) を変更する方法を示します。同じ手順を使用して、ストレージサイズ (volumes.size) を変更できます。このアプローチは、ディスクサイズを縮小したい場合に特に便利です。ディスクサイズを増やす場合は、永続ボリュームの動的なサイズ変更 を選択することもできます。
ブロックストレージを使用することを強く推奨します。Streams for Apache Kafka は、ブロックストレージでの使用に限りテストされています。
前提条件
- Cluster Operator がデプロイされている。
- Cruise Control は Kafka とともにデプロイされている。
- 動的ボリューム割り当てに永続ボリューム要求を使用するストレージの場合、必要なストレージソリューションに対応するストレージクラスが OpenShift クラスターで定義され、使用可能になります。
手順
独自のストレージ設定でノードプールを作成します。
たとえば、ノードプール
pool-aは永続ボリュームが含まれる JBOD ストレージを使用します。apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: pool-a labels: strimzi.io/cluster: my-cluster spec: roles: - broker replicas: 3 storage: type: jbod volumes: - id: 0 type: persistent-claim size: 500Gi class: gp2-ebs # ...pool-aのノードは、Amazon EBS (Elastic Block Store) GP2 ボリュームを使用するように設定されています。-
pool-aのノードプール設定を適用します。 デプロイメントのステータスを確認し、
pool-a内の Pod が作成されて準備完了 (1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>出力には、ノードプール内の 3 つの Kafka ノードが表示されます
NAME READY STATUS RESTARTS my-cluster-pool-a-0 1/1 Running 0 my-cluster-pool-a-1 1/1 Running 0 my-cluster-pool-a-2 1/1 Running 0新しいストレージクラスに移行するには、必要なストレージ設定で新しいノードプールを作成します。
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: pool-b labels: strimzi.io/cluster: my-cluster spec: roles: - broker replicas: 3 storage: type: jbod volumes: - id: 0 type: persistent-claim size: 1Ti class: gp3-ebs # ...pool-bのノードは、Amazon EBS (Elastic Block Store) GP3 ボリュームを使用するように設定されています。-
pool-bのノードプール設定を適用します。 -
デプロイメントのステータスを確認し、
pool-b内の Pod が作成されて準備完了となるまで待ちます。 パーティションを
pool-aからpool-bに再割り当てします。新しいストレージ設定に移行する場合、Cruise Control の
remove-brokersモードを使用して、削除するブローカーからパーティションレプリカを移動します。Cruise Control を使用したパーティションレプリカの再割り当て
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaRebalance metadata: # ... spec: mode: remove-brokers brokers: [0, 1, 2]pool-aからパーティションを再割り当てしています。クラスター内のトピックとパーティションの数によっては、再割り当てに時間がかかる場合があります。再割り当てプロセスが完了したら、古いノードプールを削除します。
oc delete kafkanodepool pool-a
10.5.2.8. ノードプールを使用したストレージアフィニティーの管理 リンクのコピーリンクがクリップボードにコピーされました!
ローカル永続ボリュームなどのストレージリソースが特定のワーカーノードまたはアベイラビリティーゾーンに制限されている状況では、ストレージアフィニティーを設定すると、適切なノードを使用するように Pod をスケジュールする場合に役立ちます。
ノードプールを使用すると、アフィニティーを個別に設定できます。この手順では、zone-1 と zone-2 の 2 つのアベイラビリティゾーンのストレージアフィニティーを作成および管理します。
ノードプールを個別のアベイラビリティーゾーンに設定できますが、同じストレージクラスを使用します。各ゾーンで利用可能なストレージリソースを表す all-zones 永続ストレージクラスを定義します。
また、.spec.template.pod プロパティーを使用してノードアフィニティーを設定し、zone-1 および zone-2 のワーカーノードで Kafka Pod をスケジュールします。
ストレージクラスとアフィニティーは、各アベイラビリティーゾーンのノードを表すノードプールで指定されます。
-
pool-zone-1 -
pool-zone-2
前提条件
- Cluster Operator がデプロイされている。
- アフィニティーの概念を十分に理解していない場合は、Kubernetes ノードと Pod のアフィニティーに関するドキュメント を参照してください。
手順
各アベイラビリティーゾーンで使用するストレージクラスを定義します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: all-zones provisioner: kubernetes.io/my-storage parameters: type: ssd volumeBindingMode: WaitForFirstConsumerall-zonesのストレージクラスと各ゾーンのアフィニティーを指定して、2 つのアベイラビリティーゾーンを表すノードプールを作成します。zone-1 のノードプール設定
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: pool-zone-1 labels: strimzi.io/cluster: my-cluster spec: replicas: 3 storage: type: jbod volumes: - id: 0 type: persistent-claim size: 500Gi class: all-zones template: pod: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - zone-1 # ...zone-2 のノードプール設定
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaNodePool metadata: name: pool-zone-2 labels: strimzi.io/cluster: my-cluster spec: replicas: 4 storage: type: jbod volumes: - id: 0 type: persistent-claim size: 500Gi class: all-zones template: pod: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - zone-2 # ...- ノードプール設定を適用します。
デプロイメントのステータスを確認し、ノードプール内の Pod が作成されて準備完了 (
1/1) となるまで待ちます。oc get pods -n <my_cluster_operator_namespace>出力には、
pool-zone-1の 3 つの Kafka ノードと、pool-zone-2の 4 つの Kafka ノードが表示されますNAME READY STATUS RESTARTS my-cluster-pool-zone-1-kafka-0 1/1 Running 0 my-cluster-pool-zone-1-kafka-1 1/1 Running 0 my-cluster-pool-zone-1-kafka-2 1/1 Running 0 my-cluster-pool-zone-2-kafka-3 1/1 Running 0 my-cluster-pool-zone-2-kafka-4 1/1 Running 0 my-cluster-pool-zone-2-kafka-5 1/1 Running 0 my-cluster-pool-zone-2-kafka-6 1/1 Running 0
10.5.3. ZooKeeper を使用した Kafka ストレージの設定 リンクのコピーリンクがクリップボードにコピーされました!
ZooKeeper を使用している場合は、Kafka リソースでそのストレージを設定します。デプロイメントでノードプールを使用するかどうかに応じて、Kafka リソースまたは KafkaNodePool リソースで Kafka クラスターのストレージを設定します。
このセクションでは、Kafka リソース内の ZooKeeper ストレージと Kafka ストレージの設定のみ取り上げています。Kafka ストレージの詳細は、ノードプールを使用したストレージ設定 を説明しているセクションを参照してください。Kafka リソースでも、ストレージ用の同じ設定オプションが利用できます。
ZooKeeper にはデータレプリケーションが組み込まれているため、複製されたストレージは必要ありません。
10.5.3.1. 一時ストレージの設定 リンクのコピーリンクがクリップボードにコピーされました!
一時ストレージを使用するには、ストレージタイプとして ephemeral を指定します。
一時ストレージの設定例
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
storage:
type: ephemeral
zookeeper:
storage:
type: ephemeral
# ...
Kafka ブローカーがログディレクトリー用に使用する一時ボリュームは、/var/lib/kafka/data/kafka-log<pod_id> にマウントされます。
一時ストレージは、シングルノードの ZooKeeper クラスターやレプリケーション係数が 1 の Kafka トピックには適していません。
10.5.3.2. Configuring persistent storage リンクのコピーリンクがクリップボードにコピーされました!
Kafka リソースの Kafka にも、ノードプールで使用できる同じ永続ストレージ設定オプションを指定できます。詳細は、ノードプールを使用した Kafka ストレージの設定 に関するセクションを参照してください。size プロパティーを調整して 永続ボリュームのサイズを変更する こともできます。
ZooKeeper では JBOD ストレージがサポートされていないため、ストレージタイプは必ず persistent-claim にする必要があります。
永続ストレージの設定例
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
storage:
type: persistent-claim
size: 500Gi
deleteClaim: true
# ...
zookeeper:
storage:
type: persistent-claim
size: 1000Gi
Kafka リソースにストレージが設定されている場合に Kafka Pod 用に作成された PVC は data-<cluster_name>-kafka-<pod_id> の命名規則を使用し、Kafka ログの永続ボリュームは /var/lib/kafka/data/kafka-log<pod_id> にマウントされます。
ZooKeeper 用に作成された PVC は、data-<cluster_name>-zookeeper-<pod_id> の命名規則に従います。
KRaft モードと同様に、カスタムストレージクラスとボリュームセレクターも指定できます。
10.5.3.3. JBOD ストレージの設定 リンクのコピーリンクがクリップボードにコピーされました!
ZooKeeper は JBOD ストレージをサポートしていませんが、ZooKeeper ベースのクラスター内の Kafka ノードは JBOD ストレージを使用するように設定できます。ノードプールで使用できるものと同じ JBOD 設定オプションを、Kafka リソースの Kafka にも指定できます。詳細は、ノードプールを使用した Kafka ストレージの設定 に関するセクションを参照してください。volumes 配列を調整して、ボリュームを追加または削除する こともできます。
JBOD ストレージの設定例
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
- id: 1
type: persistent-claim
size: 100Gi
deleteClaim: false
- id: 2
type: persistent-claim
size: 100Gi
deleteClaim: false
# ...
zookeeper:
storage:
type: persistent-claim
size: 1000Gi
10.5.3.4. ストレージクラスのオーバーライドからの移行 (非推奨) リンクのコピーリンクがクリップボードにコピーされました!
以前に Kafka リソースで Kafka および ZooKeeper に使用されていた非推奨の overrides プロパティーは、ボリュームが使用するストレージクラスの変更にノードプールを使用する方法に置き換えられます。
クラスオーバーライドを使用したストレージ設定の例
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
labels:
app: my-cluster
name: my-cluster
namespace: myproject
spec:
# ...
kafka:
replicas: 3
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
class: my-storage-class
overrides:
- broker: 0
class: my-storage-class-zone-1a
- broker: 1
class: my-storage-class-zone-1b
- broker: 2
class: my-storage-class-zone-1c
# ...
# ...
zookeeper:
replicas: 3
storage:
deleteClaim: true
size: 100Gi
type: persistent-claim
class: my-storage-class
overrides:
- broker: 0
class: my-storage-class-zone-1a
- broker: 1
class: my-storage-class-zone-1b
- broker: 2
class: my-storage-class-zone-1c
# ...
Kafka にストレージクラスのオーバーライドを使用している場合は、代わりにノードプールの使用に移行することが推奨されます。既存の設定を移行するには、次の手順に従います。
- ノードプールのリソースがすでに使用されていることを確認してください。そうでない場合は、まず ノードプールを使用するようにクラスターを移行 する必要があります。
- オーバーライドを使用せずに、目的のストレージクラスを使用するストレージ設定により新しい ノードプール を作成します。
- ストレージクラスのオーバーライドを使用する古いブローカーから、すべてのパーティションレプリカを移動します。これは、Cruise Control を使用するか、パーティション再割り当てツールを使用 して実行できます。
- ストレージクラスのオーバーライドを使用する古いブローカーを含む古いノードプールを削除します。
10.5.4. 階層化ストレージ (早期アクセス) リンクのコピーリンクがクリップボードにコピーされました!
階層化ストレージは、ログセグメントを別のストレージシステムに移動することで、Kafka データを管理するための柔軟なアプローチを導入します。たとえば、頻繁にアクセスされるデータに対してブローカー上のブロックストレージの使用を組み合わせ、データのアクセス性と耐久性を損なうことなく、古いデータやアクセス頻度の低いデータをブロックストレージから Amazon S3 などのよりコスト効率が高くスケーラブルなリモートストレージソリューションにオフロードできます。
階層化ストレージは Kafka の早期アクセス機能であり、Streams for Apache Kafka でも利用できます。現在の制限 により、実稼働環境では推奨されません。
階層化ストレージでは、Kafka とリモートストレージシステム間の通信を処理するために Kafka の RemoteStorageManager インターフェイスの実装が必要です。これは、Kafka リソースの設定によって有効になります。Streams for Apache Kafka は、カスタムの階層化ストレージが有効な場合、Remote Log Metadata Management (RLMM) に Kafka の TopicBasedRemoteLogMetadataManager を使用します。RLMM は、リモートストレージに関連するメタデータを管理します。
カスタムの階層化ストレージを使用するには、次の手順を実行します。
- カスタムコンテナーイメージをビルドして、Streams for Apache Kafka イメージに Kafka 用の階層化ストレージプラグインを含めます。プラグインは、Streams for Apache Kafka によって管理される Kafka クラスターが階層化ストレージソリューションと対話するために必要な機能を提供する必要があります。
-
KafkaリソースのtieredStorageプロパティーを使用して、階層化ストレージ用に Kafka を設定します。カスタムRemoteStorageManager実装のクラス名とパス、および追加の設定を指定します。 - 必要に応じて、RLMM 固有の階層化ストレージ設定を指定します。
Kafka のカスタム階層化ストレージ設定の例
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
tieredStorage:
type: custom
remoteStorageManager:
className: com.example.kafka.tiered.storage.s3.S3RemoteStorageManager
classPath: /opt/kafka/plugins/tiered-storage-s3/*
config:
storage.bucket.name: my-bucket
# ...
config:
rlmm.config.remote.log.metadata.topic.replication.factor: 1
# ...
- 1
typeはcustomに設定する必要があります。- 2
- クラス名とパスを含むカスタム
RemoteStorageManager実装の設定。 - 3
- カスタム
RemoteStorageManager実装に渡す設定。Streams for Apache Kafka によってrsm.config.という接頭辞が自動的に付けられます。 - 4
- RLMM に渡す階層型ストレージ設定。
rlmm.config.の接頭辞が必要です。階層化ストレージ設定の詳細は、Apache Kafka のドキュメント を参照してください。