Kafka とは何か
はじめに
アドベントカレンダー12/21 = 21記事目
多くの Web サービスやバックエンドシステムでは、「あるシステムが生成したデータを別のシステムで処理する」という流れがあります。
特に、ログ収集や注文データ、センサーデータなど「大量データを高速かつリアルタイムでやり取りしたい」場合に便利なのが、メッセージキュー/ストリーミング基盤です。
Apache Kafka(以下 “Kafka”)は、この中でも「高スループット」「耐障害性」「スケーラビリティ」に優れており、多くのサービスで採用されています。
この記事では、Kafka について調べた事をアウトプットしたいと思います。
Kafka を一言でいうと
「データ(メッセージ)をシステム間でやりとりするための、高速でスケーラブルな中継役」 です。
- 「あるシステム(Producer)がデータを投げる」
- 「Kafka(Broker)がそのデータを受け取り、蓄えておく」
- 「別のシステム(Consumer)が後でそのデータを受け取る」
という流れで、システム同士のつなぎ役/バッファの役割を果たします。 (Apache Kafka)
Kafka の構成要素 — 用語の意味
| 用語 | 説明 |
|---|---|
| Producer(プロデューサー) | データを生成し、Kafka に送る側のシステム/処理。メッセージを「送信」する役割。 (Apache Kafka) |
| Broker(ブローカー) | Kafka のサーバー。受け取ったメッセージを受け取り、保存・管理する。Kafka クラスターは複数の Broker からなる。 (Apache Kafka) |
| Topic(トピック) | メッセージのカテゴリや “箱”。Producer は Topic を指定してメッセージを送る。Consumer はその Topic を購読。 (Apache Kafka) |
| Partition(パーティション) | Topic を分割した単位。データを複数の Partition に分けて保存することで、並列処理やスケーラビリティを実現。 (upsolver.com) |
| Consumer(コンシューマー) | Kafka に送られたメッセージを受け取って処理する側のシステム。Consumer は Topic を購読する。 (Apache Kafka) |
| Consumer Group(コンシューマーグループ) | 複数の Consumer をまとめた “グループ”。同じグループの Consumer で Partition を分担することで、並列処理・負荷分散が可能。 (Apache Kafka) |
Kafka の特徴・強み
Kafka が他のメッセージキューや単なるキューイングシステムと比べて選ばれる理由は次の通りです。
- ⚡ 高速 & 大量データ対応 — Partition やクラスタ構成により、非常に高スループットで大量のメッセージを処理可能。 (Amazon Web Services, Inc.)
- 💾 データの永続性・保持 — メッセージは一度送られて終わりではなく、一定期間ディスクに保存されるため、後から読み直したり複数回消費したりできる。 (GeeksforGeeks)
- 🔁 複数の Consumer に同じデータを配信可能 — Publisher/Subscriber 型の処理も、キュー型の分散処理もどちらも実現可能。 (Cedalo)
- ⚙️ スケーラビリティ & 冗長性 — Broker を複数立て、Partition を分散・レプリケーションすることで、負荷分散・フェールオーバーに強い。 (upsolver.com)
- 🔄 柔軟な再処理 — Consumer は「どこまで読んだか(offset)」を管理できるため、必要に応じて過去メッセージを再取得・再処理できる。 (Apache Kafka)
どんなとき使う? Kafka の利用シーン
- EC サイトで「注文発生 → 注文処理システム・在庫システム・通知システム」など複数システムに同じイベントを通知
- Web アプリ/スマホアプリでのアクセスログや操作ログを集約 → リアルタイムでの分析やバッチ処理
- IoT デバイスからの大量センサーデータやイベントデータを高速で受け取り、別システムで処理
- リアルタイム分析+後からの集計やバッチ処理を組み合わせたい場合 など
「メッセージキュー」「イベント駆動」「ストリーム処理」が必要な場面にマッチします。
キュー(Queue)との違い・注意点
Kafka は「ただのキュー」ではなく、“ログベースのストリーム処理基盤” という性質があります。従来のキューメッセージシステム(たとえば一度取られたメッセージは消えるもの)とは異なります。 (Amazon Web Services, Inc.)
たとえば:
- メッセージは消えずに保存され、何度でも読み直せる
- 複数の Consumer グループが同じ Topic を異なる目的で購読できる
- Partition 単位で並列/分散処理ができる → 高スループット
- ただし「順序保証」は Partition 内でのみ。複数 Partition にまたがると順序保証は弱いので注意。 (Apache Kafka)
つまり、RabbitMQ や SQS など典型的なキューと同じ「使い所」ではあるものの、Kafka を使う/設計するならその特性(ログベース・Partition・Consumer‑group など)を理解することが大事
ここら辺は今後じっくり学んでいきたい内容…。
さいごに
Kafka は「大量データ」「リアルタイム性」「複数システム間のメッセージング」「スケール・耐障害性」が求められるシステムで非常に強力なツールです
一方で、「キュー型」と「ストリーム/ログ型」の概念を混同せずに、「何のデータを・誰が・どう使うか」を意識して設計することが大切だと感じています
あるプロジェクトで「たくさんログを集めたい」「イベントを多数のシステムに配りたい」「リアルタイム処理したい」といった要件があるなら、Kafka を使う/設計を検討する価値は高いということがわかりました。
この記事が、Kafka をこれから学ぼうとする人の参考になれば幸いです