Lesson 2 - Kafka vs. Standard Messaging
ご提示いただいたYouTube動画「Lesson 2 - Kafka vs. Standard Messaging」の内容を日本語で要約し、IT業界の背景知識や雑学を交えて詳しく解説します。
この動画は、ソフトウェアアーキテクトのMark Richards氏による「Software Architecture Monday」シリーズの第2回目で、Apache Kafkaと従来の標準的なメッセージングシステム(ActiveMQやRabbitMQなど)の決定的な違いについて解説しています。
動画の要約:Kafkaと標準メッセージングの3つの違い
動画では、両者の違いを大きく3つの観点から説明しています。
1. データの構造と流れ
-
標準メッセージング (RabbitMQ等): 「個別のメッセージ」としてデータを扱います。一度消費(読み取り)されたメッセージは通常、キューから削除されます。
-
Kafka: 「キーと値のペア」による**継続的なストリーム(流れ)**としてデータを扱います。Unixのパイプ(
|)のように、データが無限に続くストリームとして存在するのが特徴です。
2. スループット(処理能力)の桁違い
-
標準メッセージング: 1秒間に数千から、多くても1万件程度のメッセージ処理が限界です。これは、各メッセージのステータス管理(読み取り済みか等)に負荷がかかるためです。
-
Kafka: 1秒間に100万件以上という驚異的なスループットを実現します。これは、メッセージを単なる「追記型ログファイル」として保存し、読み手側が「どこまで読んだか」を管理する仕組みにしているためです。
3. 利用目的の使い分け
-
Kafka = 運用データ (Operational Data): ログ収集、ユーザー行動の追跡、リアルタイム分析など、膨大なデータを高速に流すのに適しています。
-
標準メッセージング = トランザクションデータ: 注文処理や在庫更新など、「確実に1回だけ届ける」「届かなかったらエラーにする」といった厳密な制御が必要な業務処理に適しています。
業界話と雑学:なぜKafkaはこれほど人気なのか?
「どこまで読んだか」は読者の責任?
従来のメッセージング(JMSなど)では、システム(ブローカー)側が「Aさんにこのメッセージを送った。次はBさんだ」と細かく管理していました。しかし、これでは利用者が増えるとシステムがパンクしてしまいます。
Kafkaはこれを逆転させ、**「データは置いておくから、読み手(コンシューマー)が自分でどこまで読んだか記録しておいてね」**というスタンスを取りました。これを「オフセット管理」と呼びますが、この割り切りが爆速の秘密です。
Kafkaの誕生秘話:LinkedInの悩みから生まれた
実はKafkaは、ビジネスSNSの**LinkedIn(リンクトイン)**の社内で開発されました。彼らは膨大なユーザーの行動ログをリアルタイムで解析したかったのですが、当時の既存システムでは耐えきれず、自ら「ログをストリームとして扱う」新しい仕組みを作り上げました。ちなみに名前の由来は、作者が作家のフランツ・カフカが好きだったからだと言われています。
業界での使い分けの現実
最近では「何でもKafkaでいいのでは?」という風潮もありますが、動画でも指摘されている通り使い分けが肝心です。
-
RabbitMQなど: 銀行の振込処理のように、確実に、順番通りに、一度だけ処理したい場合。
-
Kafka: Netflixの視聴履歴の分析や、タクシー配車アプリの車両位置追跡など、多少の重複よりも圧倒的なスピードと量が優先される場合。
まとめ
この動画は、**「Kafkaは単なる高性能なメッセージキューではなく、データの『ストリーム』を扱うための全く別物である」**ということを教えてくれます。
エンジニアの間では、「メッセージを『点(メッセージ)』で捉えるのがRabbitMQ、
『線(ストリーム)』で捉えるのがKafka」と理解すると、設計の際に迷わなくなるとよく言われます。
参照動画:Lesson 2 - Kafka vs. Standard Messaging
ご提示いただいた要約は、マーク・リチャーズ氏の「Lesson 2 - Kafka vs. Standard Messaging」(2018年1月公開)の内容を非常に正確に捉えています。 この動画は「Software Architecture Monday」シリーズの超初期回(Lesson 2)で、「Kafkaはメッセージキューではない。全く別の生き物だ」という衝撃的なメッセージを、10分弱で叩き込んでくれる名作です。
ここでは、要約をさらに補完・アップデートしつつ、2026年現在の実務視点、最新ベンチマーク、日本企業の実例、落とし穴あるあるを交えて深掘り解説します。
1. 動画の核心3つの違い(要約の補完版)
リチャーズ氏がデモを交えて強調しているのは、まさに以下の3点です。
-
データの構造と流れ
- 標準メッセージング(ActiveMQ / RabbitMQ / JMSなど):「個別のメッセージ」(点)。一度消費されたらキューから消える(at-most-once / exactly-once)。
- Kafka:「無限に続くログファイル(ストリーム)」(線)。キーと値のペアで、永遠に追記され続ける。Unixのcat file1 | grep xxx | ...のようなイメージ。 補足:Kafkaは「削除」ではなく「retention period(保持期間)」で古いデータを自動削除(デフォルト7日など)。だから過去の任意の時点からリプレイ可能(これが最大の強み)。
-
スループットの桁違い(2018年当時の数字 vs 2026年現在)
- 標準メッセージング:数千〜1万msg/secが現実的上限(brokerが「誰に送ったか」を1件ずつ管理するため)。
- Kafka:当時すでに100万msg/sec超を謳い、現在は1クラスタで数百万〜数千万msg/secが普通。 2026年ベンチマーク実例(Confluent / Instaclustr / 各種VPSテスト):
- 単一ブローカーで50〜100万msg/sec(バッチ+圧縮時)
- 実運用クラスタで605MB/s(約数百万msg/sec)も達成
- Redpanda(Kafka互換)だとさらに1.5〜2倍速いケースも
なぜこんなに速いか? リチャーズ氏の説明通り「brokerが管理しない」。消費者(コンシューマー)が自分で「offset(どこまで読んだか)」を記録するだけ。brokerはただ「追記専用ログ」に書き続けるだけ → ロック競合ゼロ、ディスクシーケンシャルI/O全開。
-
利用目的の使い分け(これが一番大事!)
- Kafka=Operational Data(運用データ / イベントストリーム) ログ、ユーザー行動、センサーデータ、リアルタイム分析、ETL、ML特徴量生成…
- 標準メッセージング=Transactional Data(トランザクションデータ) 注文確定、在庫引当、決済通知、メール送信…「絶対に1回だけ、順序を守って」が必要な業務。
2026年の現実:境界が少し曖昧になってきた。 KafkaのExactly-Once Semantics(EOS)やTransactions機能のおかげで、「Kafkaでもトランザクションっぽく使える」ようにはなった。でも「本当に厳密な業務ロジック」はまだRabbitMQ / ActiveMQ / AWS SQSの方が安心、という声が根強い。
2. 業界話・雑学・2026年現在のリアル(日本企業目線)
- 「オフセット管理は読者の責任」という思想革命 JMS時代はbrokerが「Aさんに送った → ack待つ → 次はBさん」と全部管理 → 利用者増えると即死。 Kafkaは「データは永遠に置いとくから、自分でoffset管理してね」。 これを「pullモデル」と呼び、消費者側が「いつでも好きなタイミングで引きに行く」のでスケールする。 日本あるある:最初「offset管理面倒くさい!」と文句言うエンジニアが、半年後には「もうこれなしでは生きられない…」になるパターン多数。
- Kafka誕生秘話(再確認) 2011年、LinkedInのJay Kreps(現Confluent CEO)が「ユーザー行動ログをリアルタイム解析したいのに、当時のシステムが全然追いつかない!」で爆誕。 名前は「作家フランツ・カフカが好きだから」。 2012年にオープンソース化 → 2010年代後半に爆発的に普及。今や「現代のデータ基盤のOS」と言われるほど。
- 日本企業での実態(2026年)
- Kafkaヘビーユーザー:LINE(ほぼ全サービスがKafkaバックボーン)、楽天、Yahoo! JAPAN、メルカリ、PayPay、DeNA、サイバーエージェント…
- ハイブリッド使い分けの鉄則:
- Kafka → イベントバス(全社横断の「事実の記録」)
- RabbitMQ / Amazon MQ → コマンドキュー(注文処理、決済などクリティカルパス)
- マネージドサービス主流:AWS MSK、Confluent Cloud、Azure Event Hubsが主流。自前クラスタ運用は減少中。
- よくある死亡フラグ(あるある)
- 「何でもKafkaでいいや!」→ トランザクションが必要な注文処理をKafkaに突っ込んで、exactly-once設定ミスで重複注文発生 → 夜中に障害対応
- 「Kafkaで同期通信したい」→ Request-Replyパターン(前回の動画参照)を無理やりやると遅延爆増
- 最新トレンドの落とし穴:KRaftモード(ZooKeeper不要)は最高だけど、Tiered Storage(S3オフロード)をオンにすると古いデータ読み込みが遅くなるケースあり。
3. 補足:動画以降の進化(Lesson 178とのつながり)
リチャーズ氏自身が2024年のLesson 178「Multi-Broker Pattern」で「標準メッセージングでもKafka並みのスループットを出せるパターン」を後から紹介しています。 つまり「2018年のLesson 2は真理だけど、技術は進化している」というのが彼のメッセージ。 2026年現在は「純粋な使い分け」だけでなく「Kafkaを基盤にしつつ、必要に応じてRabbitMQを組み合わせる」が主流デザインです。
まとめ(エンジニアに贈る一言)
リチャーズ氏のこの動画が素晴らしいのは、「Kafkaは高速キューではない。永遠に続くログストリームだ」という本質を、たった3つの違いで完璧に説明している点です。
- メッセージを「点」で捉える → RabbitMQ / ActiveMQ
- データを「線(ストリーム)」で捉える → Kafka
この理解が染み込むと、マイクロサービス設計やデータプラットフォーム構築で絶対に迷わなくなります。
動画はたった10分。ぜひもう一度見て、「offsetって結局__consumer_offsetsトピックに保存されてるんだ…」と実感しながら、 自分のプロジェクトで「これはKafka向き? Rabbit向き?」を分類してみてください。
これを機会に、Confluentの無料Kafkaクラスタやdocker-composeでKafka + RabbitMQを立てて触ってみるのが一番の近道です!
0 件のコメント:
コメントを投稿