Apache Kafkaは、リアルタイム・データを処理するオープンソースの分散型イベント・ストリーミング・プラットフォームです。Kafkaは、イベント駆動型アプリケーションのサポートと信頼性の高い データ・パイプライン の構築に優れており、低遅延で高スループットのデータ配信を実現します。
現在、何十億ものデータソースが継続的に情報を生成しており、多くの場合、イベントという形で提供されます。イベントとは、システムや環境内で発生した事象を記録する基本的なデータ構造です。
通常、イベントとはプロセスの一部として別のアクションを引き起こす動作のことを指します。顧客が注文したり、フライトの座席を選択したり、登録フォームを送信したりすることは、すべてイベントの例です。イベントは必ずしも人が関与する必要はなく、たとえば、接続されたサーモスタットが特定の時刻に温度を報告することもイベントに該当します。
イベント・ストリーミングは、アプリケーションが新しい情報に即座に対応する機会を提供します。Apache Kafkaのようなストリーミング・データ・プラットフォームを使用すれば、開発者はデータの到着と同時にそれを取り込み、処理し、対応するシステムを構築でき、各イベントの順序と信頼性も維持できます。
Kafkaは、現在最も広く使われているイベント・ストリーミング・プラットフォームへと進化しており、スケーラブルなデータ量を支えるために、数兆件のレコードを毎日取り込み・処理しながらも、目に見えるようなパフォーマンスの低下はありません。Fortune 500 企業の80%以上が、リアルタイムでデータ駆動型の顧客体験を提供するためにKafkaを利用しており、その中には Target、Microsoft、Airbnb、Netflixなどが含まれます。
2011年、LinkedInは、リアルタイムのイベントデータを大量に処理できる高スループットかつ低遅延なシステムの必要性が高まったことを受けて、Apache Kafkaを開発しました。JavaとScalaを使用して構築されたKafkaは、後にオープンソース化され、 Apacheソフトウェア財団に寄贈されました。
多くの企業がすでに従来のメッセージキュー・システム(AWSのAmazon SQSなど)をサポートまたは利用していた中で、Kafka は根本的に異なるメッセージング・システムのアーキテクチャーを導入しました。
従来のメッセージキューがメッセージを消費後に削除するのとは異なり、Kafka は設定された期間メッセージを保持し、複数のコンシューマーが同じデータを独立して読み取ることを可能にします。この機能により、Kafkaはメッセージングやイベント・ソーシング、ストリーム処理、リアルタイム・データ・パイプラインの構築に最適です。
今日、Kafkaはリアルタイム・イベント・ストリーミングの事実上の標準となっています。Kafkaを使用する業種・業務には、金融、 eコマース、通信、運輸などがあり、大量のデータを迅速かつ確実に処理する能力が不可欠とされています。
Kafkaは分散プラットフォームであり、複数のサーバーやデータセンターにまたがるフォールト・トレラントな高可用性クラスターとして動作します。
Kafkaの主な機能は次の3つです。
プロデューサー(アプリケーションやトピック)は、ログと呼ばれるトピックにレコードを書き込み、レコードは発生順に保存されます。その後、トピックはパーティションに分割され、Kafkaブローカー(サーバー)群に分散されます。
各パーティション内では、Kafkaはレコードの順序を保持し、設定された保存期間にわたってディスク上に永続的に保存します。順序が保証されるのはパーティション内のみであり、パーティションをまたいだ順序は保証されません。アプリケーションのニーズに応じて、コンシューマーはこれらのパーティションからリアルタイムで、あるいは特定のオフセットから独立してデータを読み取ることができます。
Kafkaはパーティションの複製を通じて信頼性を保証します。各パーティションにはリーダー(1つのブローカー上)がおり、他のブローカー上には1つ以上のフォロワー(レプリカ)が存在します。この複製により、ノード障害が発生してもデータ損失を防ぐことができます。
これまでKafkaは、分散ブローカーの集中管理を行うためにApache ZooKeeperに依存してきました。ZooKeeperは、一部のブローカーが障害を起こしてもKafkaブローカー間の同期を維持する役割を果たしていました。しかしKafka は、2011年に KRaft(Kafka Raft Protocol)モードを導入し、これらの管理タスクをKafkaブローカー内に統合することで、ZooKeeperを不要にしました。この移行により、外部依存が減り、アーキテクチャーが簡素化され、Kafkaクラスターの耐障害性が向上するとともに、管理やスケーリングも容易になりました。
開発者は、次の4つの主要なアプリケーション・プログラミング・インターフェース(API)を通じてKafkaの機能を活用できます。
プロデューサーAPIは、アプリケーションがKafkaトピックにストリームを公開できるようにします。トピックにレコードが書き込まれると変更や削除ができません。その代わり、あらかじめ設定された期間(たとえば2日間)またはストレージ容量がいっぱいになるまで、トピック内に保持されます。
コンシューマーAPI は、アプリケーションが1つ以上のトピックを購読し、トピックに保存されたストリームを取り込んで処理できるようにします。トピック内のレコードをリアルタイムで処理することも、過去のレコードを取り込んで処理することも可能です。
このAPIは、プロデューサーAPIおよびコンシューマーAPIを基盤とし、アプリケーションが継続的かつ一貫したストリーム処理を行えるようにする高度な処理機能を追加します。具体的には、Streams APIは1つ以上のトピックからレコードを取り込み、必要に応じて分析・集計・変換を行い、その結果を同じトピックまたは別のトピックにストリームとして公開します。
プロデューサーAPIとコンシューマーAPIでもシンプルなストリーム処理は可能ですが、ストリームAPIを使うことで、より高度なデータおよびイベント・ストリーミング・アプリケーションの開発が可能になります。
このAPIを使用すると、開発者はコネクター(再利用可能なプロデューサーまたはコンシューマー)を構築でき、Kafkaクラスターへのデータソースの統合を簡素化・自動化できます。
開発者は主に、Kafkaを使って次の2種類のアプリケーションを構築します。
大量のデータやイベントレコードを、リアルタイムかつ大規模にエンタープライズシステム間で転送することを目的としたアプリケーションです。これらのアプリケーションは、データの破損や重複といった、大量データを高速で転送する際に起こりがちな問題を回避しながら、信頼性の高いデータ移動を実現しなければなりません。
たとえば、金融機関はKafkaを活用し、決済ゲートウェイ、不正アクセス検知サービス、会計システム間で毎秒数千件のトランザクションをストリーミングし、重複や損失のない正確なリアルタイムのデータフローを実現しています。
レコードやイベント・ストリームによって動作し、自らもストリームを生成するアプリケーションです。デジタル主導の現代において、私たちはこのようなアプリケーションに日常的に触れています。
たとえば、在庫状況をリアルタイムで更新するeコマースサイトや、ユーザーの行動に基づいてパーソナライズされたコンテンツや広告を配信するプラットフォームなどが該当します。Kafkaは、ユーザーの操作をリアルタイムで分析エンジンやレコメンデーション・エンジンにストリーミングすることで、こうした体験を支えています。
Kafkaは、Apacheソフトウェア財団(ASF)に属する多くの技術を含む、さまざまな他のテクノロジーと統合されます。組織は通常、これらのテクノロジーをより大規模なイベント駆動型アーキテクチャー、ストリーム処理、またはビッグデータ分析ソリューションの中で活用します。
これらのテクノロジーの中にはオープンソースのものもありますが、Kafkaを中心に構築されたプラットフォームであるConfluentは、大規模なリアルタイムデータ処理に対応したエンタープライズ・グレードの機能やマネージドサービスを提供しています。IBMやAmazon Web Servicesをはじめとする企業は、Kafkaと連携するスケーラブルなイベント・ストリーミングのためのソリューション(IBM Event Streams、Amazon Kinesisなど)を提供しています。
Apache Kafkaエコシステムには次のようなコンポーネントが含まれます。
Apache Sparkは、大規模なデータ処理のための分析エンジンです。Sparkを使用すると、Apache Kafkaから配信されるストリームの分析を実行したり、クリックストリーム分析などのリアルタイム・ストリーム処理アプリケーションを作成したりできます。
Apache NiFiは、視覚的なドラッグ・アンド・ドロップ・インターフェイスを備えたデータフロー管理システムです。NiFiは、Kafkaのプロデューサーおよびコンシューマーとして動作できるため、Kafkaだけでは対応できないデータフローの課題を管理するのに最適なツールです。
Apache Flinkは、イベント・ストリーム上で大規模な計算を一貫した高速性と低遅延で実行するためのエンジンです。Flinkは、Kafkaのコンシューマーとしてストリームを取り込み、それに基づいたリアルタイム処理を行い、処理結果をKafkaや他のアプリケーションに配信することができます。
Apache Hadoopは、コンピューターのクラスター上に膨大なデータを分散して保存できるソフトウェアフレームワークであり、ビッグデータ分析、機械学習、データマイニング、および構造化データと非構造化データを処理する他のデータ駆動型アプリケーションで利用されます。Kafkaは、Hadoopクラスターへのリアルタイム・ストリーミング・データ・パイプラインを構築するためによく利用されます。
Apache Camelは、ルールベースのルーティングおよび仲介エンジンを備えた統合フレームワークです。Kafkaをコンポーネントとしてサポートしており、他のシステム(データベースやメッセージキューなど)とのデータ統合を容易にすることで、Kafkaをより大規模なイベント駆動型アーキテクチャーの一部として活用できます。
Apache Cassandraは、単一障害点なしに多数の汎用サーバー間で大量のデータを処理できるように設計された、高いスケーラビリティを備えたNoSQLデータベースです。
Kafkaは、リアルタイムでのデータ取り込みや、スケーラブルで耐障害性のあるアプリケーションの構築のために、Cassandraへデータをストリーミングする用途で広く使用されています。
RabbitMQは、メッセージングプロトコルを変換することでアプリケーション、システム、サービス間の通信を可能にする、人気のあるオープンソースのメッセージブローカーです。Kafkaはもともとメッセージブローカーとして開発され(現在もその用途で使用可能)、RabbitMQもパブリッシュ/サブスクライブ型メッセージングモデル(など)をサポートしているため、KafkaとRabbitMQは代替手段として比較されることがよくあります。ただし、両者は目的が異なり、それぞれ異なる種類のユースケースに対応するように設計されています。たとえば、Kafkaのトピックには複数のサブスクライバーを持たせることができますが、RabbitMQのメッセージは基本的に1つのサブスクライバーにしか配信されません。さらに、Kafkaのトピックは永続的に保存されますが、RabbitMQのメッセージは消費されると削除されます。
どちらを選ぶかを判断する際は、スループット、メッセージの永続性、レイテンシーなど、アプリケーションの具体的な要件を考慮することが重要です。Kafkaは大規模なイベント・ストリーミングに適しており、一方、RabbitMQは柔軟なメッセージ・ルーティングと低遅延処理を必要とするシナリオで優れた性能を発揮します。
Apache KafkaとオープンソースのAIを統合することで、リアルタイムデータと人工知能の扱い方が組織において大きく変わります。KafkaをオープンソースのAIツールと組み合わせることで、事前学習済みのAIモデルをライブデータに適用でき、リアルタイムの意思決定や自動化を実現できます。
オープンソースの AI によって、人工知能はより身近な存在となり、Kafkaはリアルタイムでデータを処理するためのインフラを提供します。この構成によりバッチ処理が不要になり、組織は生成されたデータに即座に対応できるようになります。
たとえば、eコマース企業は、顧客のクリックや商品閲覧といった操作をKafkaでリアルタイムにストリーミングすることができます。そのデータを事前学習済みのAIモデルが即時に処理し、パーソナライズされたレコメンデーションやターゲット広告を提供します。Kafkaがデータフローを管理し、AIモデルは流入するデータに基づいて適応することで、顧客エンゲージメントの向上につながります。
リアルタイムのデータ処理とAIモデルを組み合わせることで、組織は不正アクセス検知、予知保全 または動的料金体系においてより迅速な意思決定を行うことができ、より応答性と効率性に優れたシステムを実現できます。
IBM® Event Streamsは、オープンソースのApache Kafka上に構築されたイベント・ストリーミング・ソフトウェアです。IBM Cloud上でフルマネジド・サービスとして利用するか、セルフ・ホスティングに利用できます。
IBMの統合ソリューションでビジネスの可能性を解き放ち、アプリケーションとシステムを接続してクリティカルなデータに迅速かつ安全にアクセスできます。
IBM Cloudコンサルティング・サービスで新しい機能を解き放ち、ビジネスの俊敏性を高めましょう。