概要
Apache Kafka は分散データストリーミング・プラットフォームで、レコードのストリームをリアルタイムで公開、サブスクライブ、保存、処理できます。複数のソースからデータストリームを処理し、複数のコンシューマーに配信することに特化しています。ただ A から B に動かすのではなく、A から Z までの複数の地点、および必要なあらゆる場所に、同時に大量のデータを移動させることが可能です。
Apache Kafka は従来のエンタープライズ・メッセージング・システムに代わるものです。当初は LinkedIn が 1 日 1 兆 4,000 億件のメッセージを処理するために社内システムとして開発したものですが、今ではさまざまなエンタープライズのニーズに対応するアプリケーションを持つオープンソースのデータストリーミング・ソリューションとなりました。
Apache Kafka との非同期統合
マイクロサービスによって、開発をめぐる状況は一変しました。共有データベース階層などの依存関係が減少し、開発者の俊敏性が増しました。しかし、開発者が構築している分散アプリケーションには、データを共有するためにまだいくらかの統合が必要です。統合の手法としては同期を使った方法が一般的であり、この手法ではアプリケーション・プログラミング・インタフェース (API) を使用して異なるユーザー間でデータを共有します。
もう 1 つの手法である非同期の方法は、中間ストレージにデータを複製します。ここが Apache Kafka の出番で、他の開発チームからのデータをストリーミングしてデータストアに入力し、データを複数のチームとアプリケーション間で共有できるようにします。
マイクロサービスを利用して開発を行うチームにとっての統合の要件は、従来のウォーターフォール型開発チームのものとは異なります。このようなチームには、次の 3 つの基本的な能力が必要です。
- 分散統合:必要に応じて継続的にデプロイでき、一元化された ESB タイプのデプロイに制限されない、軽量でパターンベースの統合。
- API:収益性があり信頼できるサービスの使用方法を提供する、パートナー、顧客、開発者のエコシステムを育成するための、API ベースのサービス。
- コンテナ:クラウドネイティブのコネクテッド・アプリケーションを開発、管理、スケーリングするためのプラットフォーム。コンテナによって、DevOps プロセスの一貫として個別にデプロイでき、すぐに使えるクラスタリングでサポートされる、無駄のないアーティファクトの開発が可能になり、高可用性が確保されます。
Red Hat ではこのアプローチを「アジャイル・インテグレーション」と呼びます。このアプローチでは、統合をアプリケーション開発プロセスの一部に取り入れることで俊敏性を増し、適応性の高いソリューションを提供します。アジャイル・インテグレーションの特長の 1 つが、アプリケーション固有のニーズに応じて、同期または非同期の統合を自由に選んで使用できることです。非同期のイベント駆動型統合を使用して同期統合と API の使用を増大し、マイクロサービスのサポートを強化してアジャイル・インテグレーションを実現することを目指すのであれば、Apache Kafka は非常に優れた選択肢です。開発プロセスを効率化し、イノベーションを促進して時間を節約する取り組みの中心に Apache Kafka を据えれば、最終的には、新しい機能、アプリケーション、サービスを迅速に市場に投入することも可能になるでしょう。
Apache Kafka を使用する場面
Apache Kafka はストリーミング・データ・パイプラインに組み込まれ、システムおよびアプリケーション間でデータを共有します。また、このデータを使用するシステムおよびアプリケーションにも組み込まれます。Apache Kafka は、高スループットとスケーラビリティが欠かせないさまざまなユースケースをサポートします。Apache Kafka によって、特定のアプリケーションでのデータ共有に対してポイントツーポイントの統合の必要性が最小化されるので、レイテンシーがミリ秒単位にまで短縮されます。つまり、データがすぐにユーザーの手に渡るようになります。これは、IT 運用や e コマースなど、リアルタイムでデータを取得する必要があるユースケースにおいては大きなメリットになり得ます。
Apache Kafka は毎秒数百万のデータポイントを処理できるため、ビッグデータの課題に対する最適な解決策です。さらに Kafka は、現在このような膨大な量のデータを取り扱っていない企業にとっても意味があります。IoT (モノのインターネット) やソーシャルメディアなど、多数のデータ処理ユースケースにおいて、データは爆発的に増加しており、現在のデータ量を基準に構築しているアプリケーションではまもなく手に負えなくなります。データ処理の面ではスケーラビリティを考慮する必要があり、データの急増化を見越しておく必要があります。
IT 運用
IT 運用の要はデータです。IT 運用部門はデータにアクセスする必要があり、しかも迅速なアクセスが必要です。Web サイト、アプリケーション、システムを常時稼働させ、機能させるには、これが唯一の方法です。Apache Kafka は、監視、アラート、レポート、ログ管理、Web サイトアクティビティの追跡など、さまざまな情報源からのデータ収集を中心とする IT 運用業務に適しています。
IoT (モノのインターネット)
Gartner によると、2020 年までに、IoT デバイスは 200 億台以上になると予測されています。IoT の価値は、この膨大な量のセンサーから生成される実用的なデータです。Apache Kafka は IoT から送信される膨大な量のデータを処理できるスケーラビリティを念頭に設計されています。
e コマース
e コマースは Apache Kafka を使用する事例として成長中の分野で、ページクリック、いいね、検索、注文、ショッピングカート、インベントリーなどのデータを処理できます。
Kubernetes で Apache Kafka アプリケーションをスケーリングする
Kubernetes は Apache Kafka にとって理想的なプラットフォームです。開発者には Kafka アプリケーションをホストするスケーラブルなプラットフォームが必要で、その回答が Kubernetes です。
Apache Kafka と同様に、Kubernetes も開発プロセスの俊敏性向上に貢献します。Google のクラウドサービスを支えるテクノロジーである Kubernetes は、コンテナ化アプリケーションを管理するオープンソース・システムであり、これを使うことで、コンテナに関連する手動プロセスの多くが不要になります。Apache Kafka を Kubernetes で使用すると、Apache Kafka のデプロイ、構成、管理、使用が最適化されます。
Kafka と Kubernetes を組み合わせると、Kafka のすべてのメリットに加えて、Kubernetes の特長であるスケーラビリティ、高可用性、可搬性、デプロイの容易性も活用できます。
Kubernetes のスケーラビリティは自ずと Kafka を補完します。Kubernetes では、シンプルなコマンドでリソースをスケールアップまたはスケールダウンできます。または、必要に応じて使用量をベースに自動的にスケーリングして、コンピュート、ネットワーク、ストレージのインフラストラクチャを最適に利用できます。この機能によって、限りのあるリソースプールを Apache Kafka と他のアプリケーションで共有させることが可能になります。また、Kubernetes を使えば、Apache Kafka をインフラストラクチャ・プロバイダーやオペレーティングシステムに移植することもできます。Kubernetes によって、Apache Kafka クラスタをオンサイトおよびパブリック、プライベート、またはハイブリッドクラウドにまたがらせ、異なるオペレーティングシステムを使用することができます。