1.はじめに
リアルタイムデータ処理やシステム間連携のためのメッセージング基盤として、Apache Kafkaが利用されます。
Kafkaを学び始めると、
- Topic
- Partition
- Offset
- Consumer Group
など、聞き慣れない用語が次々と登場します。
私自身も最初は、「用語の意味は何となく分かるけれど、それぞれがどのような役割を持ち、なぜ必要なのか」がなかなか理解できませんでした。
そこで本記事では、Kafkaを理解するうえで重要な
- Topic
- Partition
- Offset
- Consumer Group
- 順序保証の仕組み
について、できるだけ図を交えながら初心者向けに解説します。
2.Kafkaとは
Apache Kafkaは、Producer(送信側)とConsumer(受信側)の間に入り、大量のメッセージを高速にやり取りするための分散型メッセージングシステムです。
Kafkaは受け取ったメッセージを複数のサーバーへ分散して保存することで、
- 大量データを処理できる
- 高い可用性を実現できる
- システム間の連携を容易にできる
といった特徴があります。
3.Topicとは
Topicとは、
メッセージを分類するためのカテゴリ
です。
例えば、
- 注文情報
- 会員情報
- 商品情報
を扱うシステムなら、
OrderTopic
MemberTopic
ProductTopic
のようにTopicを分けます。
Producerは送信先のTopicを指定してデータを送信し、
Consumerも取得したいTopicを指定してデータを受信します。
Topicがあることで、必要なデータだけを効率よく取得できるようになります。
4.Partitionとは
TopicはさらにPartitionという単位に分割されます。
Topic
├── Partition0
├── Partition1
└── Partition2
Partitionへ分割することで、複数サーバーへデータを分散して保存できるため、大量データでも高速に処理できます。
5.Replica
Kafkaでは障害対策として、Partitionのコピー(Replica)も保持します。
1つのBroker(サーバー)が停止しても、Replicaからデータを読み取ることでサービスを継続できます。
6.Offsetとは
Offsetとは、Partition内でメッセージに付与される連番です。
Kafkaでは、メッセージが書き込まれた順番に番号が振られます。
Offsetによって、Consumerは
- どこまで読んだか
- 次にどこから読むか
(画像引用:Apache Kafka 超入門)
7.Offsetが役立つ場面
Offsetには2種類存在します。
①Current Offset:Consumerがメッセージをどこまで読んだかを記録
②Commit Offset:Consumerがメッセージをどこまで処理したかを記録
例えば、Consumerがデータを処理中に障害が発生したとします。
この場合、Commit Offsetを元にCurrent Offsetを巻き戻せば、失敗した箇所から処理を再開できます。
(画像引用:Apache Kafka 超入門)
8.Consumer Groupとは
Consumer Groupとは、同じ役割を持つConsumerのグループです。
例えば、
Consumer Group
├── Consumer1
├── Consumer2
└── Consumer3
のように複数のConsumerで構成されます。
Kafkaは、それぞれのConsumerへ異なるPartitionを割り当てます。
Partition0 → Consumer1
Partition1 → Consumer2
Partition2 → Consumer3
この仕組みによって、
複数のConsumerで並列処理を実現しています。
なお、1つのPartitionを同じConsumer Group内の複数Consumerが同時に読み込むことはありません。

(画像引用:Kafkaが紡ぐイベント・ストリーミングの世界 ~前編 メッセージング基盤およびデータ連携基盤としてのKafka)
9.なぜ順序保証されるのか
Kafkaでは、同じキーを持つデータは、必ず同じPartitionへ送られます。
例えば、
UserID=100
のデータは、常に同じPartitionへ格納されます。
さらに、Partition内では、
Offset0
Offset1
Offset2
Offset3
のように、
書き込み順にOffsetが付与されます。
ConsumerはOffset順にデータを取得するため、
同じPartition内では送信順が保証されます。
つまり、
「同じユーザーの更新履歴」
「同じ注文番号のイベント」
などは、送信した順番通りに処理できます。
10.順序保証で注意すること
Kafkaは
Topic全体の順序
を保証しているわけではありません。
保証されるのは、
Partition単位
です。
例えば、
Partition0
Offset0
Offset1
Partition1
Offset0
Offset1
この2つのPartitionは並列に処理されるため、Topic全体では順番が前後する可能性があります。
そのため、順序を保証したいデータには、同じキーを設定し、同じPartitionへ送信することが重要です。
11.まとめ
Kafkaには、大量データを高速に処理するための様々な仕組みがあります。
- Topic:メッセージを分類するカテゴリ
- Partition:Topicを分割し並列処理を実現する仕組み
- Replica:障害対策として保持するPartitionのコピー
- Offset:メッセージへ付与される連番
- Consumer Group:Consumerをグループ化して並列処理を行う仕組み
また、Kafkaで順序保証されるのはTopic全体ではなく、Partition単位という点も重要です。
Kafkaを利用する際は、TopicやPartitionの設計だけでなく、キーの付け方やConsumer Groupの構成も考慮することで、より安定したシステムを構築できます。
最後まで読んでいただき、ありがとうございました!
12.参考資料
・Apache Kafka 超入門
・Kafkaが紡ぐイベント・ストリーミングの世界 ~前編 メッセージング基盤およびデータ連携基盤としてのKafka
・え、まって。その並列分散処理、Kafkaのしくみでもできるの?Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
・Apache Kafkaの用語とコマンド
・【入門】Apache Kafka とは?docker で起動から使い方までを解説




