Apache Kafkaとは

同じ机で働く若い学生と大人の女性

執筆者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Apache Kafkaとは

Apache Kafkaは、リアルタイム・データを処理するオープンソースの分散型イベント・ストリーミング・プラットフォームです。Kafkaは、イベント駆動型アプリケーションのサポートと信頼性の高い データ・パイプライン の構築に優れており、低遅延で高スループットのデータ配信を実現します。

現在、何十億ものデータソースが継続的に情報を生成しており、多くの場合、イベントという形で提供されます。イベントとは、システムや環境内で発生した事象を記録する基本的なデータ構造です。

通常、イベントとはプロセスの一部として別のアクションを引き起こす動作のことを指します。顧客が注文したり、フライトの座席を選択したり、登録フォームを送信したりすることは、すべてイベントの例です。イベントは必ずしも人が関与する必要はなく、たとえば、接続されたサーモスタットが特定の時刻に温度を報告することもイベントに該当します。

イベント・ストリーミングは、アプリケーションが新しい情報に即座に対応する機会を提供します。Apache Kafkaのようなストリーミング・データ・プラットフォームを使用すれば、開発者はデータの到着と同時にそれを取り込み、処理し、対応するシステムを構築でき、各イベントの順序と信頼性も維持できます。

Kafkaは、現在最も広く使われているイベント・ストリーミング・プラットフォームへと進化しており、スケーラブルなデータ量を支えるために、数兆件のレコードを毎日取り込み・処理しながらも、目に見えるようなパフォーマンスの低下はありません。Fortune 500 企業の80%以上が、リアルタイムでデータ駆動型の顧客体験を提供するためにKafkaを利用しており、その中には Target、Microsoft、Airbnb、Netflixなどが含まれます。

Apache Kafkaの起源

2011年、LinkedInは、リアルタイムのイベントデータを大量に処理できる高スループットかつ低遅延なシステムの必要性が高まったことを受けて、Apache Kafkaを開発しました。JavaとScalaを使用して構築されたKafkaは、後にオープンソース化され、 Apacheソフトウェア財団に寄贈されました。

多くの企業がすでに従来のメッセージキュー・システム(AWSのAmazon SQSなど)をサポートまたは利用していた中で、Kafka は根本的に異なるメッセージング・システムのアーキテクチャーを導入しました。

従来のメッセージキューがメッセージを消費後に削除するのとは異なり、Kafka は設定された期間メッセージを保持し、複数のコンシューマーが同じデータを独立して読み取ることを可能にします。この機能により、Kafkaはメッセージングやイベント・ソーシング、ストリーム処理、リアルタイム・データ・パイプラインの構築に最適です。

今日、Kafkaはリアルタイム・イベント・ストリーミングの事実上の標準となっています。Kafkaを使用する業種・業務には、金融、 eコマース、通信、運輸などがあり、大量のデータを迅速かつ確実に処理する能力が不可欠とされています。

Apache Kafkaのしくみ

Kafkaは分散プラットフォームであり、複数のサーバーやデータセンターにまたがるフォールト・トレラントな高可用性クラスターとして動作します。

Kafkaの主な機能は次の3つです。

  1. アプリケーションがデータやイベント・ストリームを発行または購読できるようにします。
  2. 発生順に記録を正確に保存し、フォールト・トレラントで耐久性に優れたストレージを提供します。
  3. 記録されたデータを発生と同時にリアルタイムで処理します。

プロデューサー(アプリケーションやトピック)は、ログと呼ばれるトピックにレコードを書き込み、レコードは発生順に保存されます。その後、トピックはパーティションに分割され、Kafkaブローカー(サーバー)群に分散されます。

各パーティション内では、Kafkaはレコードの順序を保持し、設定された保存期間にわたってディスク上に永続的に保存します。順序が保証されるのはパーティション内のみであり、パーティションをまたいだ順序は保証されません。アプリケーションのニーズに応じて、コンシューマーはこれらのパーティションからリアルタイムで、あるいは特定のオフセットから独立してデータを読み取ることができます。

Kafkaはパーティションの複製を通じて信頼性を保証します。各パーティションにはリーダー(1つのブローカー上)がおり、他のブローカー上には1つ以上のフォロワー(レプリカ)が存在します。この複製により、ノード障害が発生してもデータ損失を防ぐことができます。

これまでKafkaは、分散ブローカーの集中管理を行うためにApache ZooKeeperに依存してきました。ZooKeeperは、一部のブローカーが障害を起こしてもKafkaブローカー間の同期を維持する役割を果たしていました。しかしKafka は、2011年に KRaft(Kafka Raft Protocol)モードを導入し、これらの管理タスクをKafkaブローカー内に統合することで、ZooKeeperを不要にしました。この移行により、外部依存が減り、アーキテクチャーが簡素化され、Kafkaクラスターの耐障害性が向上するとともに、管理やスケーリングも容易になりました。

ビジネス街をバックにスマホを持つ手

The DX Leaders

「The DX Leaders」は日本語でお届けするニュースレターです。AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。

Apache Kafka API

開発者は、次の4つの主要なアプリケーション・プログラミング・インターフェース(API)を通じてKafkaの機能を活用できます。

  1. プロデューサーAPI
  2. 消費者 API
  3. ストリームAPI
  4. コネクターAPI
プロデューサーAPI

プロデューサーAPIは、アプリケーションがKafkaトピックにストリームを公開できるようにします。トピックにレコードが書き込まれると変更や削除ができません。その代わり、あらかじめ設定された期間(たとえば2日間)またはストレージ容量がいっぱいになるまで、トピック内に保持されます。

消費者 API

コンシューマーAPI は、アプリケーションが1つ以上のトピックを購読し、トピックに保存されたストリームを取り込んで処理できるようにします。トピック内のレコードをリアルタイムで処理することも、過去のレコードを取り込んで処理することも可能です。

ストリームAPI

このAPIは、プロデューサーAPIおよびコンシューマーAPIを基盤とし、アプリケーションが継続的かつ一貫したストリーム処理を行えるようにする高度な処理機能を追加します。具体的には、Streams APIは1つ以上のトピックからレコードを取り込み、必要に応じて分析・集計・変換を行い、その結果を同じトピックまたは別のトピックにストリームとして公開します。

プロデューサーAPIとコンシューマーAPIでもシンプルなストリーム処理は可能ですが、ストリームAPIを使うことで、より高度なデータおよびイベント・ストリーミング・アプリケーションの開発が可能になります。

コネクターAPI

このAPIを使用すると、開発者はコネクター(再利用可能なプロデューサーまたはコンシューマー)を構築でき、Kafkaクラスターへのデータソースの統合を簡素化・自動化できます。

Apache Kafkaのユースケース

開発者は主に、Kafkaを使って次の2種類のアプリケーションを構築します。

  • リアルタイム・ストリーミング・データ・パイプライン
  • リアルタイム・ストリーミング・アプリケーション

リアルタイム・ストリーミング・データ・パイプライン

大量のデータやイベントレコードを、リアルタイムかつ大規模にエンタープライズシステム間で転送することを目的としたアプリケーションです。これらのアプリケーションは、データの破損や重複といった、大量データを高速で転送する際に起こりがちな問題を回避しながら、信頼性の高いデータ移動を実現しなければなりません。

たとえば、金融機関はKafkaを活用し、決済ゲートウェイ、不正アクセス検知サービス、会計システム間で毎秒数千件のトランザクションをストリーミングし、重複や損失のない正確なリアルタイムのデータフローを実現しています。

リアルタイム・ストリーミング・アプリケーション

レコードやイベント・ストリームによって動作し、自らもストリームを生成するアプリケーションです。デジタル主導の現代において、私たちはこのようなアプリケーションに日常的に触れています。

たとえば、在庫状況をリアルタイムで更新するeコマースサイトや、ユーザーの行動に基づいてパーソナライズされたコンテンツや広告を配信するプラットフォームなどが該当します。Kafkaは、ユーザーの操作をリアルタイムで分析エンジンやレコメンデーション・エンジンにストリーミングすることで、こうした体験を支えています。

その他のApache Kafkaのユースケース

  • マイクロサービス:Kafkaは、非同期のイベント駆動型メッセージングを可能にすることで、マイクロサービス間の通信を支援します。この機能により、サービスは密に結合されず相互にアクションをトリガーできるようになるため、スケーラブルで分離されたシステム・アーキテクチャーがサポートされます。
  • コンテナ化されたクラウドネイティブ環境:Kafkaは、Dockerによるコンテナ化Kubernetesによるコンテナ・オーケストレーションを通じて、クラウドネイティブ・プラットフォームとシームレスに統合されます。この構成により、スケーラブルで耐障害性のあるイベント駆動型通信が可能になり、インフラの手動管理の必要性を最小限に抑えられます。KafkaはKubernetes内で自動的にスケールおよび障害からの復旧が可能なため、多様なアプリケーション・ワークロードが稼働する動的なクラウド・コンピューティング環境に最適です。
  • データレイクとデータウェアハウス:Kafkaは、データレイクデータウェアハウスなどのストレージ・プラットフォームとデータソースの間をリアルタイムでつなぐデータ・パイプラインとして機能します。この機能により、大量のデータをリアルタイムで取り込み・分析できるようになり、最新の分析やビジネス・インテリジェンスのワークフローに不可欠な基盤となります。
  • IoT(モノのインターネット)データ処理:Kafkaは、IoTデバイスからの継続的なデータストリームの処理に適しており、高スループットかつ低遅延のデータを、データベース、分析エンジン、監視ツールなどの宛先へリアルタイムでルーティングすることを可能にします。この機能は、製造業や医療などの時間的依存性の高いアプリケーションを支える基盤となります。
WebMethods Hybrid Integration

AI時代の統合を再構築

IBM® Web Methods Hybrid Integrationは、企業がクラウドとオンプレミスのアプリケーションをシームレスに接続し、アジャイルでスケーラブルなデジタル・トランスフォーメーションを実現する方法を紹介します。

Apache Kafkaのエコシステム

Kafkaは、Apacheソフトウェア財団(ASF)に属する多くの技術を含む、さまざまな他のテクノロジーと統合されます。組織は通常、これらのテクノロジーをより大規模なイベント駆動型アーキテクチャー、ストリーム処理、またはビッグデータ分析ソリューションの中で活用します。

これらのテクノロジーの中にはオープンソースのものもありますが、Kafkaを中心に構築されたプラットフォームであるConfluentは、大規模なリアルタイムデータ処理に対応したエンタープライズ・グレードの機能やマネージドサービスを提供しています。IBMやAmazon Web Servicesをはじめとする企業は、Kafkaと連携するスケーラブルなイベント・ストリーミングのためのソリューション(IBM Event Streams、Amazon Kinesisなど)を提供しています。

Apache Kafkaエコシステムには次のようなコンポーネントが含まれます。

  • Apache Spark
  • Apache NiFi
  • Apache Flink
  • Apache Hadoop
  • Apache Camel
  • Apache Cassandra

Apache Spark

Apache Sparkは、大規模なデータ処理のための分析エンジンです。Sparkを使用すると、Apache Kafkaから配信されるストリームの分析を実行したり、クリックストリーム分析などのリアルタイム・ストリーム処理アプリケーションを作成したりできます。

Apache NiFi

Apache NiFiは、視覚的なドラッグ・アンド・ドロップ・インターフェイスを備えたデータフロー管理システムです。NiFiは、Kafkaのプロデューサーおよびコンシューマーとして動作できるため、Kafkaだけでは対応できないデータフローの課題を管理するのに最適なツールです。

Apache Flink

Apache Flinkは、イベント・ストリーム上で大規模な計算を一貫した高速性と低遅延で実行するためのエンジンです。Flinkは、Kafkaのコンシューマーとしてストリームを取り込み、それに基づいたリアルタイム処理を行い、処理結果をKafkaや他のアプリケーションに配信することができます。

Apache Hadoop

Apache Hadoopは、コンピューターのクラスター上に膨大なデータを分散して保存できるソフトウェアフレームワークであり、ビッグデータ分析、機械学習データマイニング、および構造化データと非構造化データを処理する他のデータ駆動型アプリケーションで利用されます。Kafkaは、Hadoopクラスターへのリアルタイム・ストリーミング・データ・パイプラインを構築するためによく利用されます。

Apache Camel

Apache Camelは、ルールベースのルーティングおよび仲介エンジンを備えた統合フレームワークです。Kafkaをコンポーネントとしてサポートしており、他のシステム(データベースやメッセージキューなど)とのデータ統合を容易にすることで、Kafkaをより大規模なイベント駆動型アーキテクチャーの一部として活用できます。

Apache Cassandra

Apache Cassandraは、単一障害点なしに多数の汎用サーバー間で大量のデータを処理できるように設計された、高いスケーラビリティを備えたNoSQLデータベースです。

Kafkaは、リアルタイムでのデータ取り込みや、スケーラブルで耐障害性のあるアプリケーションの構築のために、Cassandraへデータをストリーミングする用途で広く使用されています。

Kafka vs. RabbitMQ

RabbitMQは、メッセージングプロトコルを変換することでアプリケーション、システム、サービス間の通信を可能にする、人気のあるオープンソースのメッセージブローカーです。Kafkaはもともとメッセージブローカーとして開発され(現在もその用途で使用可能)、RabbitMQもパブリッシュ/サブスクライブ型メッセージングモデル(など)をサポートしているため、KafkaとRabbitMQは代替手段として比較されることがよくあります。ただし、両者は目的が異なり、それぞれ異なる種類のユースケースに対応するように設計されています。たとえば、Kafkaのトピックには複数のサブスクライバーを持たせることができますが、RabbitMQのメッセージは基本的に1つのサブスクライバーにしか配信されません。さらに、Kafkaのトピックは永続的に保存されますが、RabbitMQのメッセージは消費されると削除されます。

どちらを選ぶかを判断する際は、スループット、メッセージの永続性、レイテンシーなど、アプリケーションの具体的な要件を考慮することが重要です。Kafkaは大規模なイベント・ストリーミングに適しており、一方、RabbitMQは柔軟なメッセージ・ルーティングと低遅延処理を必要とするシナリオで優れた性能を発揮します。

Apache KafkaとオープンソースのAI

Apache KafkaとオープンソースのAIを統合することで、リアルタイムデータと人工知能の扱い方が組織において大きく変わります。KafkaをオープンソースのAIツールと組み合わせることで、事前学習済みのAIモデルをライブデータに適用でき、リアルタイムの意思決定や自動化を実現できます。

オープンソースの AI によって、人工知能はより身近な存在となり、Kafkaはリアルタイムでデータを処理するためのインフラを提供します。この構成によりバッチ処理が不要になり、組織は生成されたデータに即座に対応できるようになります。

たとえば、eコマース企業は、顧客のクリックや商品閲覧といった操作をKafkaでリアルタイムにストリーミングすることができます。そのデータを事前学習済みのAIモデルが即時に処理し、パーソナライズされたレコメンデーションやターゲット広告を提供します。Kafkaがデータフローを管理し、AIモデルは流入するデータに基づいて適応することで、顧客エンゲージメントの向上につながります。

リアルタイムのデータ処理とAIモデルを組み合わせることで、組織は不正アクセス検知、予知保全 または動的料金体系においてより迅速な意思決定を行うことができ、より応答性と効率性に優れたシステムを実現できます。

Apache Kafkaのメリット

  • リアルタイムのデータ処理: Kafkaは、リアルタイムのデータ・パイプラインとストリーミング・アプリケーションを実現します。これにより、システムがレコードのストリームを発生と同時に公開・購読・処理できるようにし、モニタリング、アラート、分析といったユースケースをサポートします。
  • 高いパフォーマンスと拡張性: Kafkaのトピックはパーティション分割および複製されており、パフォーマンスを損なうことなく同時接続する多数のコンシューマーに対応できるよう拡張可能です。
  • セキュリティーとコンプライアンス:Apache Kafkaは、転送中および保存中のデータの暗号化に加え、構成可能なアクセス制御もサポートしています。これらの機能により、組織は機密データを保護し、業界のコンプライアンス基準に準拠することが可能になります。
  • 高可用性: Kafkaは、複数のブローカー間でデータを複製することで高可用性を確保します。ノードが障害を起こしてもメッセージは利用可能なままで、データ損失やダウンタイムを伴うことなくシステムは稼働を継続します。
  • 管理の簡素化:Kafkaには監視、設定、自動化のためのツールが含まれており、運用負担の軽減に役立ちます。オーケストレーションおよび管理プラットフォームとの統合も容易で、デプロイメントとスケーリングがより管理しやすくなります。また、KafkaはJMX(Java Management Extensions)を通じて詳細なパフォーマンスおよびヘルス・メトリクスを提供し、スループット、レイテンシー、ブローカーの健全性、コンシューマー・ラグといった重要指標を可視化できるため、効果的なモニタリングやキャパシティ・プランニングが可能になります。
  • 広範な統合性:Kafkaは、豊富なコネクターやクライアントAPIにより、データベース、ファイル・システム、クラウド・サービスと容易に統合できます。たとえば、Kafka Connectはシステム間のデータ移動をシームレスに実現し、Kafka Streamsはリアルタイムのストリーム処理を可能にすることで、統合機能をさらに強化します。
関連ソリューション
IBM Event Streams

IBM® Event Streamsは、オープンソースのApache Kafka上に構築されたイベント・ストリーミング・ソフトウェアです。IBM Cloud上でフルマネジド・サービスとして利用するか、セルフ・ホスティングに利用できます。

Event Streamsの詳細はこちら
インテグレーション・ソフトウェアとソリューション

IBMの統合ソリューションでビジネスの可能性を解き放ち、アプリケーションとシステムを接続してクリティカルなデータに迅速かつ安全にアクセスできます。

統合ソリューションの詳細はこちら
クラウド・コンサルティング・サービス

IBM Cloudコンサルティング・サービスで新しい機能を解き放ち、ビジネスの俊敏性を高めましょう。

クラウド・コンサルティング・サービスの詳細はこちら
次のステップ

IBM® Event Streamsは、オープンソースのApache Kafka上に構築されたイベント・ストリーミング・ソフトウェアです。IBM Cloud上でフルマネジド・サービスとして利用するか、セルフ・ホスティングに利用できます。

Event Streamsの詳細はこちら 詳細を取得する