0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Kafka】KafkaのTopic・Partition・Offset・Consumer Groupを図で理解する

0
Posted at

1.はじめに

リアルタイムデータ処理やシステム間連携のためのメッセージング基盤として、Apache Kafkaが利用されます。

Kafkaを学び始めると、

  • Topic
  • Partition
  • Offset
  • Consumer Group

など、聞き慣れない用語が次々と登場します。

私自身も最初は、「用語の意味は何となく分かるけれど、それぞれがどのような役割を持ち、なぜ必要なのか」がなかなか理解できませんでした。

そこで本記事では、Kafkaを理解するうえで重要な

  • Topic
  • Partition
  • Offset
  • Consumer Group
  • 順序保証の仕組み

について、できるだけ図を交えながら初心者向けに解説します。

2.Kafkaとは

Apache Kafkaは、Producer(送信側)とConsumer(受信側)の間に入り、大量のメッセージを高速にやり取りするための分散型メッセージングシステムです。

image.png

Kafkaは受け取ったメッセージを複数のサーバーへ分散して保存することで、

  • 大量データを処理できる
  • 高い可用性を実現できる
  • システム間の連携を容易にできる

といった特徴があります。

3.Topicとは

Topicとは、

メッセージを分類するためのカテゴリ

です。

例えば、

  • 注文情報
  • 会員情報
  • 商品情報

を扱うシステムなら、

OrderTopic
MemberTopic
ProductTopic

のようにTopicを分けます。

Producerは送信先のTopicを指定してデータを送信し、
Consumerも取得したいTopicを指定してデータを受信します。

Topicがあることで、必要なデータだけを効率よく取得できるようになります。

image.png

4.Partitionとは

TopicはさらにPartitionという単位に分割されます。

Topic
├── Partition0
├── Partition1
└── Partition2

Partitionへ分割することで、複数サーバーへデータを分散して保存できるため、大量データでも高速に処理できます。

5.Replica

Kafkaでは障害対策として、Partitionのコピー(Replica)も保持します。
1つのBroker(サーバー)が停止しても、Replicaからデータを読み取ることでサービスを継続できます。

image.png

6.Offsetとは

Offsetとは、Partition内でメッセージに付与される連番です。
Kafkaでは、メッセージが書き込まれた順番に番号が振られます。

Offsetによって、Consumerは

  • どこまで読んだか
  • 次にどこから読むか

を判断できます。
image.png

(画像引用:Apache Kafka 超入門

7.Offsetが役立つ場面

Offsetには2種類存在します。

①Current Offset:Consumerがメッセージをどこまで読んだかを記録
②Commit Offset:Consumerがメッセージをどこまで処理したかを記録

例えば、Consumerがデータを処理中に障害が発生したとします。
この場合、Commit Offsetを元にCurrent Offsetを巻き戻せば、失敗した箇所から処理を再開できます。

image.png

(画像引用: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が同時に読み込むことはありません。

image.png
(画像引用: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 で起動から使い方までを解説

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?