概要
Kubernetes などのコンテナ・オーケストレーション・プラットフォームに Apache Kafka をデプロイすると、イベント駆動型アプリケーションの自動化とスケーリングが可能になり、また、どこにでもデプロイすることができます。つまり、Kubernetes は、Apache Kafka 上に構築されたアプリケーションの固有の柔軟性を向上します。
マイクロサービスとクラウドネイティブ開発を採用するエンタープライズ IT はますます増加しており、その結果、イベント駆動型アプリケーション (EDA) によって分散システムが投入されています。この動的な開発環境では、多くのデジタルリーダーが Apache Kafka を利用し、それを Kubernetes と組み合わせています。
Apache Kafka によって、ユーザーはビジネスをリアルタイムで確認および分析し、絶えず変化する市場の状況にすばやく対応することができます。さらに、Apache Kafka は、内部のステークホルダー、外部のパートナー、サプライヤー、顧客とのリアルタイム接続を確立し、維持するための優れたオプションです。
Kafka Streams (任意のアプリケーションに追加できる Apache Kafka 内の機能) は、Kafka イベントのシンプルで強力なストリーム処理を可能にします。膨大な量のデータの処理と分析を、その場で、継続的かつ同時に実行できるという点で、Apache Kafka は他のメッセージングのオプションとは一線を画しています。Apache Kafka を使用すると、ユーザーは、ビッグデータ機構が数値を処理するのを待つのではなく、インラインのリアルタイム分析のためにイベントを集約、変換、強化、整理することができます。このため、リアルタイムデータへの即時応答を必要とするすべてのアプリケーションにとって Apache Kafka は不可欠です。
Apache Kafka は、クラウドネイティブ開発の理想的な基盤です。クラウドネイティブ・アプリケーションはイベント駆動型であり、Apache Kafka はイベントの管理に最適なバックボーンです。分散ストリーミング、リアルタイム処理、高いスケーラビリティといったコアなイベント駆動型機能はすべて、Apache Kafka によって可能になります。
クラウドネイティブ後の次のステップであるサーバーレス・アーキテクチャもイベントベースであり、Apache Kafka によって実現できます。開発者は、Kubernetes 上の Apache Kafka を利用して、スケーラブルなサーバーレス通知、プロセス間通信、サーバーレス機能の可視性を提供できます。
Kubernetes で Apache Kafka を実行する理由
Apache Kafka は、Kubernetes のコンテナ管理システムに頻繁にデプロイされます。これは、ホストのクラスタ全体でコンテナのデプロイ、スケーリング、運用を自動化するために使用されます。Kubernetes 上の Apache Kafka は、次世代のアプリケーション開発であるクラウドネイティブ開発と密接に関連しています。クラウドネイティブ・アプリケーションは、クラウドを介して高いスケーラビリティを提供する独立した疎結合の分散サービスです。同様に、Kafka で構築されたイベント駆動型アプリケーションは疎結合され、分散型ハイブリッドクラウド環境全体でスケーリングを行えるように設計されます。
Kubernetes で Apache Kafka を実行する運用チームにとっての主なメリットは、インフラストラクチャの抽象化です。これは、一度構成すればどこでも実行できます。現代の運用チームは通常、さまざまなオンプレミスリソースとクラウドリソースを管理します。Kubernetes を使用すると、これらのアセットを、Apache Kafka などのソフトウェアリソースの割り当てが可能なコンピューティング・リソースのプールとして扱うことができます。さらに、この同じ Kubernetes レイヤーにより、すべての Apache Kafka インスタンスを管理するための単一の環境が作られます。
Kubernetes に本来備わっているスケーラビリティは自ずと Apache Kafka を補完します。Kubernetes を使用すると、アプリケーションはシンプルなコマンドでリソースをスケールアップまたはスケールダウンできます。または、使用量をベースに自動的にスケーリングして、コンピュート、ネットワーク、ストレージのリソースを最も経済的に利用できます。また、Kubernetes は、Apache Kafka にオンプレミス、パブリック、プライベート、またはハイブリッドクラウドにまたがる可搬性を与え、異なるオペレーティングシステムを使用します。
Strimzi:Kubernetes で Apache Kafka を機能させる
Apache Kafka の手動運用は、多くのコンポーネントの過剰な設定を必要とする複雑な作業です。ベアメタルでの (そしてやはり仮想マシンでも) Apache Kafka の実行は複雑です。ノードのデプロイ、監視、更新、ロールバックは非常に複雑で困難です。
ここで、この複雑さを解決するものとして登場するのが、Strimzi オープンソース・プロジェクトです。Strimzi はオペレーターを使用して、Apache Kafka の構成をスムーズかつシームレスにデプロイします。オペレーターは、Kubernetes でアプリケーションをデプロイおよび管理するための最先端の機能で、インフラストラクチャレベルで抽象化し、開発者がインフラストラクチャに関する多くの情報を持たなくてもアプリケーションをデプロイできることから、開発に柔軟性をもたらします。オペレーターが自動的にインフラストラクチャをプロビジョニングして、すべての詳細を管理するので、開発者は専門的事項 (マシンの数やハードウェアの種類など) を知る必要がありません。
Strimzi には IaC (Infrastructure as Code) のメリットがあり、開発者はコードのようなインストラクションを簡単に記述するだけでインフラストラクチャを定義でき、Strimzi はこのインストラクションを完璧に実行します。Strimzi は、高可用性モードでの Apache Kafka のデプロイを単純化することもできます。これも他では困難です。
Strimzi のオペレーターは、Apache Kafka の多くのセキュリティ上の懸念にも対応しています。これは、Strimzi を実行するもう 1 つの重要な理由です。また、Strimzi は、シングルサインオン、暗号化、認証を使用して、Kubernetes 上の Apache Kafka のセキュリティを自動化するため、開発者は基本的なセキュリティ機能の実装に時間を費やす必要がありません。
適切な EDA ソリューションを見つける
Streams for Apache Kafka は Red Hat Integration の一部であり、Apache Kafka と Strimzi プロジェクトの Red Hat エンタープライズ・ディストリビューションです。Streams for Apache Kafka が Apache Kafka にもたらす付加価値の多くは、Kubernetes や、Kubernetes の Red Hat ディストリビューションである Red Hat OpenShift で Apache Kafka を使用することに焦点を当てています。
OpenShift 上の Streams for Apache Kafka は、Kubernetes 上の Apache Kafka によって、分散型データストリームとストリーム処理を行うマイクロサービスベースのアプリケーションをサポートするエンタープライズ・グレードのイベント駆動型アーキテクチャを実現します。Apache Kafka に固有のパーティショニングがスケーラビリティ要件への対処に役立つため、Streams for Apache Kafka は大規模で高スループットのシナリオに特に適しています。