【あぱっちかふか】

Apache Kafka とは?

💡 毎秒数百万メッセージを捌く「イベントの高速道路」
📌 このページのポイント
Apache Kafka — 分散メッセージストリーミング Producer A Producer B Producer C Topic: orders P0 P1 P2 Consumer Group Consumer 1 Consumer 2 Consumer 3 データ送信側 パーティション分割でログを並列管理 データ受信側 各パーティションは順序保証付きの追記専用ログ Consumer Groupにより各パーティションを1つのConsumerが担当
Apache Kafkaのイメージ — パーティション分割で高スループットを実現
ひよこ ひよこ

普通のメッセージキューと何が違うの?

ペンギン先生 ペンギン先生

RabbitMQなどの従来のメッセージキューはメッセージを消費したら消える。Kafkaは分散ログとしてメッセージを保持し続ける(保持期間は設定可能)。同じメッセージを複数のConsumerが読める。再処理や複数のシステムへの配信が容易。毎秒数百万メッセージを捌けるスループットも桁違いだよ

ひよこ ひよこ

どんな場面で使う?

ペンギン先生 ペンギン先生

①リアルタイムログ収集(サーバーログをKafkaに流してElasticsearchに格納)、②イベント駆動マイクロサービス(注文イベントを在庫・決済・通知サービスに配信)、③ストリーム処理(ユーザー行動をリアルタイムで集計してレコメンド)、④データパイプライン(DBの変更をリアルタイムでDWH同期

ひよこ ひよこ

仕組みを簡単に教えて?

ペンギン先生 ペンギン先生

データは「Topic」に書き込まれ、Topicは「Partition」に分割される。ProducerがTopicにメッセージを書き、ConsumerがPartitionから読む。Partitionが複数あるから並列処理できて高スループット。各メッセージにはオフセット(番号)が振られ、Consumerは「どこまで読んだか」を管理して、障害時に再開できるんだよ

ひよこ ひよこ

運用は難しい?

ペンギン先生 ペンギン先生

正直、運用コストは高い。ZooKeeper(またはKRaft)によるクラスタ管理、Partitionのリバランス、レプリケーション設定、監視。自前運用が大変ならConflect Cloud、AWS MSK、Redpandaなどのマネージドサービスがおすすめ。Redpandaは KafkaのAPI互換でZooKeeper不要、運用が楽だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Kafka」って出てきたら「大規模リアルタイムデータを流す分散メッセージングシステム」と思えればだいたいOK!
📖 おまけ:英語の意味
「Apache Kafka」 = アパッチ・カフカ
💬 作家のフランツ・カフカに因んで名付けられた。「書くことに最適化されたシステム」だからだよ
← 用語集にもどる