【あぱっちかふか】

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」 = アパッチ・カフカ
💬 作家のフランツ・カフカに因んで名付けられた。「書くことに最適化されたシステム」だからだよ
← 用語集にもどる