531 文字
3 分
Kafkaは「録画できるイベント基盤」
Apache Kafka は、書き込まれたメッセージを 追記型のログ として保存し、複数の購読者が好きなタイミングで読み出せる分散基盤です。「メッセージキューに似ているが、過去のメッセージを後からでも再生できる」というのが大きな違いです。
構成要素
- トピック:メッセージの宛先カテゴリ。プロデューサーはここに送り、コンシューマーはここから読む。
- パーティション:トピックは複数のパーティションに分割でき、並列に書き込み/読み出しできる。
- オフセット:パーティションごとに、メッセージの位置を示す通し番号。コンシューマーは自分が「どこまで読んだか」を覚える。
- ブローカー:実体としてメッセージを保持するサーバー。クラスタを組んで冗長化する。
- コンシューマーグループ:同じグループ内では各パーティションを分け合って読む。グループを分けると、それぞれが独立してフルストリームを読める。
キューとの違い
一般的なメッセージキュー(RabbitMQ、SQSなど)は、「読まれたメッセージは消える」モデルです。Kafka は逆で、保存期間内であれば何度でも読み直せる。これにより以下のような使い方がしやすくなります。
- 新しい消費者を後から追加して、過去のデータも処理する。
- 障害でロストしたコンシューマーが、再起動後に途中から続きを処理する。
- 同じイベントストリームを、分析・通知・監査など複数の用途で同時に使う。
代表的な使い所
- マイクロサービス間のイベント連携(注文された、決済が完了した、など)。
- ログ・メトリクスの集約パイプライン。
- DB の変更データ取り込み(CDC)。
- リアルタイム分析の入口。
注意点
- 学習コストが高い。プロデューサーの ack 設定やコンシューマーのコミット戦略を理解しないと、メッセージロストや重複が起きやすい。
- 運用コストも高い。ZooKeeper(あるいは KRaft)、ブローカー、トピックの設計、保存期間の設計と、考えることが多い。
- 「とりあえずキュー欲しいだけ」の場面では、SQS や Redis のほうが軽い。
要件に合えば非常に強力ですが、過剰投入になりやすい技術でもあります。