Apache Kafka あぱっちかふか
簡単に言うとこんな感じ!
Kafkaは「超高性能な伝言板」だよ!たくさんのシステムが同時にメッセージを投稿したり読んだりしても壊れない、超タフな仕組みなんだ。大量データをリアルタイムで捌く現代システムの要(かなめ)ってこと!
Apache Kafkaとは
Apache Kafka(カフカ)は、大量のデータをリアルタイムで送受信するための分散メッセージストリーミング基盤です。もともとLinkedIn社が社内の膨大なログデータを処理するために開発し、2011年にオープンソースとして公開されました。現在はApache Software Foundationが管理しています。
Kafkaの最大の特徴は「どんな大量のメッセージでも高速・安全に中継できる」点です。ECサイトの注文履歴、IoTセンサーのデータ、金融取引ログなど、1秒間に数百万件という規模のデータをリアルタイムで複数システムに届けることができます。従来のデータベースや単純なキューでは到底捌けないようなデータ量を扱えるのが、Kafkaが注目される理由です。
ビジネスの現場では「システム間の配管工事」に例えられることがあります。注文システム・在庫システム・物流システムなど、バラバラに動く複数のシステムをKafkaがハブとなってつなぎ、リアルタイムにデータを橋渡しします。これにより、各システムが直接通信し合う複雑な依存関係を解消できます。
Kafkaの核心構造:パブリッシュ/サブスクライブモデル
Kafkaはパブリッシュ/サブスクライブ(Pub/Sub)モデルという仕組みで動いています。「伝言板にメモを貼る人(Producer)」と「そのメモを読む人(Consumer)」が、Kafkaという掲示板を通して非同期にやり取りします。
| 構成要素 | 役割 | 身近な例え |
|---|---|---|
| Producer(プロデューサー) | メッセージを送信する側 | 注文システム、センサー機器 |
| Topic(トピック) | メッセージの分類フォルダ | 掲示板のカテゴリ(「注文情報」「ログ」など) |
| Broker(ブローカー) | メッセージを受け取り保存するサーバー | 掲示板の管理人 |
| Consumer(コンシューマー) | メッセージを受信して処理する側 | 在庫システム、分析システム |
| Partition(パーティション) | トピックを並列処理するための分割単位 | 同じカテゴリの掲示板を複数用意する |
| Consumer Group | 複数のConsumerをまとめたグループ | チームで手分けして読む担当者たち |
覚え方:「トピックに投げてグループで拾う」
Kafkaの基本動作はこう覚えよう。「Producerがトピックに投げて、Consumer Groupが拾う」。投げた側は拾う相手を気にしなくていい、拾う側は誰が投げたかを気にしなくていい。この「疎結合(そけつごう)」がKafkaの最大のメリットです。
Kafkaの3大特長
- 高スループット: 1秒間に数百万件のメッセージ処理が可能
- 永続化(ログ保持): メッセージを一定期間ディスクに保存。読み直し(リプレイ)が可能
- スケールアウト: Brokerを追加するだけで処理能力を拡張できる
歴史と背景
- 2010年: LinkedIn社がサービスの急成長に伴うログデータ処理の限界に直面。内部ツールとしてKafkaを開発
- 2011年: Apache Software Foundationにオープンソースとして寄贈・公開
- 2012年: Apache トップレベルプロジェクトに昇格
- 2014年: Kafkaの主要開発者たちがConfluent社を設立。エンタープライズ向けサポートとKafkaエコシステムの拡充を開始
- 2017年頃: Kafka Streams(ストリーム処理ライブラリ)が安定版に。単なるメッセージングを超えたリアルタイム処理基盤へと進化
- 2019年: KIP-500(KRaft) プロジェクト開始。ZooKeeperへの依存を廃止してKafka単体での動作を目指す
- 2022〜現在: KRaftモードが本格導入。Netflix・Uber・Airbnb・LINE・PayPayなどグローバルな大規模サービスでの採用が標準化
他のメッセージング技術との比較
Kafkaとよく比較されるのが、RabbitMQ(ラビットMQ)とAmazon SQS(キューサービス)です。それぞれの特性を整理します。
| 比較項目 | Apache Kafka | RabbitMQ | Amazon SQS |
|---|---|---|---|
| モデル | Pub/Sub・ログ型 | キュー型・ルーティング型 | キュー型 |
| スループット | 非常に高い(数百万件/秒) | 中程度 | 高い |
| メッセージ保持 | 期間指定で保持(リプレイ可能) | 消費後は削除 | 消費後は削除 |
| ユースケース | ログ収集・イベントストリーミング | タスクキュー・RPC | シンプルなタスク分散 |
| 運用難易度 | 高い(クラスター管理が必要) | 中程度 | 低い(フルマネージド) |
| 向いている規模 | 大規模・ハイスループット | 中小規模 | 中小〜大規模 |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 7519 | JWT(JSON Web Token)。Kafkaのアクセス認証連携で利用されることがある |
| RFC 8446 | TLS 1.3。Kafkaブローカー間・クライアント間の通信暗号化に使用 |
関連用語
- メッセージキュー — システム間でメッセージを非同期に受け渡す仕組み全般
- パブリッシュ/サブスクライブ — 送信者と受信者を直接つながずにメッセージを配信するパターン
- イベント駆動アーキテクチャ — イベント発生をトリガーにシステムが連携する設計思想
- Amazon SQS — AWSが提供するフルマネージドのメッセージキューサービス
- マイクロサービス — 機能ごとに独立した小さなサービスで構成するシステム設計。Kafkaと相性が良い
- ストリーム処理 — データが生成されるそばからリアルタイムで処理する手法
- Apache Zookeeper — 分散システムの管理ツール。旧来のKafkaが依存していたコーディネーター
- ETL — データを抽出・変換・ロードするパイプライン。Kafkaがデータ中継役を担うことが多い