Kafkaはイベントストリーム処理のためのデータストリームプラットフォームであり、トピック(Topic)とパーティション(Partition)を用いた分散処理を実現しています。一方、StrimziはCNCF(Cloud Native Computing Foundation)の孵化プロジェクトとして、Kubernetes上でApache Kafkaを運用するためのツールであり、デプロイ、セキュリティ、アップグレードなどのDay 1とDay 2の操作をサポートしています。この記事では、Strimziが提供するCruise Controlとの統合により、Kafkaのワークロードバランスを効率的に実現する方法について解説します。
Kafkaは、トピックとパーティションを用いた分散型メッセージキューであり、パーティションのレプリケーション(Replica)を複數のBrokerに分散することで高可用性を実現します。Strimziは、Kubernetes上でApache Kafkaを運用するためのオープンソースプロジェクトであり、Kafkaのデプロイ、監視、セキュリティ設定、アップグレードなど、運用ライフサイクル全體をサポートします。
Cruise Controlは、Kafkaのワークロードバランスを自動化するオープンソースツールで、以下の3つのフェーズで動作します。
また、Cruise ControlはBrokerの障害、ディスクエラー、トピックの異常などを検出し、通知や自動修復を実行する異常検出機能も備えています。
Cruise Controlのデプロイは、Kafkaのカスタムリソース(Custom Resource)を用いて行います。spec.cruiseControl
でデフォルトの目標(CPU/メモリ容量)、認証、TLS証明書などを設定し、Kafka Brokerのメトリクスレポートャー(Metrics Reporter)を自動的に構成します。Strimzi Operatorは、Brokerのロールアウト更新を行い、メトリクスレポートャーを起動し、Cruise Controlをデプロイします。
Kubernetesとの統合では、KafkaRebalance
というカスタムリソースを用いて、ユーザーが負荷バランスの目標とパラメータを指定します。以下は、KafkaRebalance
のリソース構造の例です。
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaRebalance
metadata:
name: my-rebalance
spec:
cluster: my-cluster
goals:
- type: "BALANCE_CPU"
- type: "BALANCE_NETWORK"
mode: "FULL"
replicationThrottle: "10MB/s"
操作フローは以下の通りです。
KafkaRebalance
リソースを作成し、Operatorが最適化提案を生成します。strimzi.io/approved: "true"
などのアノテーションで提案を承認し、実行を開始します。strimzi.io/stop: "true"
)または提案を再生成する(strimzi.io/refresh: "true"
)が可能です。提案評価では、OperatorがKafkaRebalance
リソースの狀態を更新し、移動するパーティション數やリーダー調整などの情報を表示します。
実行制御では、replicationThrottle
パラメータでパーティション移動の速度を制限し、クラスターのパフォーマンスへの影響を抑えることができます。また、クラスター狀態の変化(パーティション調整など)が発生した場合、提案を再生成して最新のモデルを取得できます。
狀態監視では、提案、実行進捗、異常通知などのすべての操作狀態がKafkaRebalance
リソースの狀態フィールドに返されます。
Cruise Controlのコンポーネントには、メトリクスレポートャー、ロードモニタ、エグゼキューター、異常検出器が含まれます。メトリクスレポートャーは各Kafka Brokerで指標を収集し、Kafkaトピックに送信します。ロードモニタは指標を分析し、ワークロードモデルを構築します。エグゼキューターはパーティションの移動を実行し、異常検出器はBrokerの障害やトピックの異常を検出し、通知を発信します。
Kubernetesのコンポーネントには、Operatorとロールアウト更新が含まれます。OperatorはCruise Controlを自動的にデプロイし、KafkaRebalance
リソースを管理します。ロールアウト更新はKafka Brokerを更新し、メトリクスレポートャーを有効化します。
目標導向バランスは、CPU、ネットワーク、rack分散などのカスタム負荷目標をサポートし、ハード目標(必須達成)とソフト目標(近似達成)を區別します。
Kubernetesの自動化は、カスタムリソースとOperatorを用いてCruise Controlを管理し、REST APIの直接操作を迴避します。
セキュリティでは、デフォルトでTLS認証が有効化され、Cruise ControlとKafka間の通信を安全にします。
Cruise Controlは異常検出機能を備えており、自動的に修正を実行しますが、Kubernetesイベントなどの通知メカニズムを組み合わせて、ユーザーに異常を知らせる必要があります。コミュニティは提案を通じて、異常通知や進捗監視などの機能拡張に貢獻できます。
StreamCom 2024(6月開催)では、Strimziの核心機能、內部実裝、使用例、CNCFプロジェクトとの統合について議論されます。コミュニティ參加方法として、Slackでの協力依頼、GitHubでのIssue提出や議論、コードの貢獻、ドキュメントの修正、機能提案などが挙げられます。また、ライトニングトークでStrimziの現在の狀況と今後の方向性について紹介されます。
StrimziとCruise Controlの統合により、Kafkaのワークロードバランスを自動化し、運用効率を向上させることができます。カスタムリソースとOperatorを活用することで、Kubernetes環境での負荷バランス管理が簡素化され、セキュリティとスケーラビリティが確保されます。実裝時には、目標設定、異常検出、自動修復の設定を慎重に行い、クラスターの安定性を維持することが重要です。