Apache Kafka とは

Apache Kafka は人気のイベント ストリーミング プラットフォームであり、ストリーミング イベント データ、つまりはっきりとした始まりや終わりのないデータを収集、処理、保存するために使用されます。Kafka を活用すれば、1 分間で数十億ものストリーミング イベントを処理するようスケールできる新世代の分散アプリケーションが実現します。

Apache Kafka や Google Cloud Pub/Sub などのイベント ストリーミング システムが登場するまでは、定期的なバッチジョブによるデータ処理が主流であり、元データはまず保存されてから任意の時間間隔で処理されていました。たとえば、通信会社であれば 1 日、1 週間、1 か月の終わりまで待ってから、数百万もの通話記録を分析し、累積された請求額を計算します。

バッチ処理の制限の一つに、リアルタイムでないという点があります。利害に関わることが発生した際に、タイミングよくビジネス上の意思決定を行って行動に移すために、リアルタイムでデータを分析するという組織の要望はますます高まっています。たとえば、先ほどの通信企業は、全体的なカスタマー エクスペリエンスを向上させる一つの方法として、顧客にリアルタイムの請求額を知らせることでメリットを得られるかもしれません。

そこで、イベント ストリーミングの出番です。イベント ストリーミングは、利害に関わることが起こった場合に常にデータの時間的価値を捕捉し、対応する push ベースのアプリを作成するために、イベントの作成時に無限のイベント ストリームを継続的に処理するプロセスを指します。イベント ストリーミングの例には、顧客向けウェブ アプリケーションによって生成されるログファイルの継続的な分析、e コマース ウェブサイトを閲覧するユーザーの顧客行動のモニタリングと対応、ソーシャル ネットワークによって生成されるクリックストリーム データの変化を分析することによる顧客感情の継続的な把握、モノのインターネット(IoT)デバイスによって生成されるテレメトリ データの収集と対応などがあります。

Confluent Cloud のフルマネージドで統合された Google Cloud 上の Apache Kafka サービスについて詳しくご覧ください。

Apache Kafka の概要

Kafka はストリーミング データを取得し、起きたことおよびそのタイミングを正確に記録します。このレコードは、不変 commit ログと呼ばれます。レコードに追加はできますが、それ以外の方法で変更することはできないため、不変と呼ばれます。それから、ログにサブスクライブ(データにアクセス)でき、いくつものストリーミング リアルタイム アプリケーションや他のシステムからログにパブリッシュ(データを追加)することもできます。

たとえば、Kafka を使用すると、ウェブサイトからストリーミングされるすべてのトランザクション データを取得してアプリケーションにフィードし、製品売り上げのリアルタイム追跡、在庫数量との比較、ジャストインタイム在庫補充を行うことができます。

Kafka のメリット

Kafka はオープンソース

これは、誰でもソースコードを自由に使用して、目的を問わず、独自のバージョンとして利用、修正、配布できることを意味します。ライセンス料やその他の制約はありません。Kafka にとっても、Kafka を使用し貢献する開発者のグローバル コミュニティがあることで、メリットを享受できます。結果として、Kafka は拡大を続けるエコシステムの一環として、多様なコネクタ、プラグイン、モニタリング ツール、構成ツールを提供しています。

規模とスピード

Kafka は、増え続けるデータ量に合わせてスケールするだけでなく、そのデータを企業全体にリアルタイムで提供します。Kafka の主なメリットの一つとして、分散型プラットフォームであることが挙げられます。つまり、複数のマシン(物理マシンまたは仮想マシン)間で処理を分散できるということです。これには 2 つのメリットがあります。1 つ目は、処理能力またはストレージを増やす必要がある場合に、少し手を加えればスケールアウトしてマシンを追加できることです。2 つ目は、個別のマシンが故障してもプラットフォームが稼働するため、信頼性が高いことです。ただし、Kafka のこの特長は大規模な管理が難しい場合があります。

マネージド サービスとしての Kafka

このように Kafka にはメリットもありますが、デプロイが難しい技術でもあります。オンプレミスの Kafka クラスタは本番環境での設定、スケール、管理が簡単ではありません。Kafka を実行するためのオンプレミス インフラストラクチャの確立にあたっては、マシンをプロビジョニングし、Kafka を構成する必要があります。また、分散マシンのクラスタを設計して可用性を確保し、データが確実に安全な状態で格納されるようにしなければなりません。さらに、モニタリングを設定し、データを慎重にスケールして負荷の変化をサポートする必要もあります。その後は、故障したマシンを交換し、定期的なパッチ適用とアップグレードを行って、インフラストラクチャを維持する必要があります。

もう一つの方法は、Kafka をクラウドのマネージド サービスとして使用することです。Kafka インフラストラクチャのプロビジョニング、構築、維持は、サードパーティのベンダーが担当するため、行う必要があるのはアプリケーションの構築と実行です。そのため、Kafka インフラストラクチャ管理に関する専門知識が不要になり、Kafka のデプロイが簡単になります。インフラストラクチャの管理にかける時間が減り、ビジネスに価値を付加するための時間をもっと確保できます。

Kafka の仕組み

Kafka は、次の 5 つのコア機能でストリーミング イベントを処理します。

公開

データソースがデータイベントのストリームを 1 つ以上の Kafka トピック、または類似のデータイベントのグループにパブリッシュあるいは配置します。たとえば、ネットワーク ルーターなどの IoT デバイスからデータ ストリームを受け取り、予測メンテナンスを行うアプリケーションにパブリッシュして、このルーターが故障する可能性の高いタイミングを計算できます。

消費

アプリケーションは 1 つ以上の Kafka トピックにサブスクライブし(データを受け取り)、生成されるデータ ストリームを処理します。たとえば、アプリケーションで複数のソーシャル メディア ストリームからのデータを取得して分析し、あるブランドに関するオンラインでの会話の傾向を導き出せます。

処理

Kafka Streams API はストリーム プロセッサとして機能します。1 つ以上のトピックからの受信データ ストリームを消費し、1 つ以上のトピックへの送信データ ストリームを生成します。

接続

Kafka トピックを既存のアプリケーションにリンクする再利用可能なプロデューサーまたはコンシューマー接続を構築することもできます。Dataproc、BigQuery といった主要サービスへのコネクタなど、数百もの既存のコネクタがすでに用意されています。

保管

Apache Kafka は耐久性の高いストレージを提供します。Kafka は「信頼できるデータソース」として機能します。複数のノードをまたいでデータを配信できるため、1 つのデータセンター内または複数のアベイラビリティ ゾーンにわたる高可用性デプロイメントを実現できます。