dshimizu/blog/alpha

とりとめのないITブログ

Apache Kafka の構成要素とかに関して調べたことの自分用メモ

はじめに

Amazon Managed Streaming for Apache Kafka (MSK) を触る必要が出てきたので、Apache Kafka の概要を浅く理解するために調べた自分用メモ。 まだあんまりわかっていないので、誤ったことを書いている可能性が高いので、都度修正する予定。

Apache Kafka

用語系

イベントストリーミング

ドキュメントではイベントストリーミングプラットフォームとされている。

イベントストリーミングが何か、明確な言葉の定義があるのかわかっていないが、モバイルデバイスやセンサー、システムを利用しているユーザーのアクションにより発生するデータなど、何らかのデータを発生させる端末やシステム(=イベントソース?)から、短い間隔で継続的(無制限に)に発生して送られてくるいろんな形式のデータ群、みたいな感じだと思われる。

イベントストリームプラットフォームが何か、というと、ドキュメントでは、イベントを読み書きしたり、継続的に他のシステムからimport/exportしたり、必要な期間保持し続けたり、イベント発生時や過去のデータも処理することができるもの、とのこと。

イベント

何かが起こったことの記録(≒発生するデータ)。Kafka (というかイベントストリーミング系のシステム?)ではレコードまたはメッセージなどとも呼ばれる模様。

全体構成の概要図

多分こんな感じっぽい。

Broker クラスターの管理を、 Zookeeper ではなく、Broker自体の機能に含める、といった大きな変更が進んでいるようなので、今後のバージョンで Zookeeper はなくなっていく模様。*1 MSK を使っている場合は Zookeeper もマネージドになっているので直接触る機会はないけど、Apache ZooKeeper の接続エンドポイントは払い出されるので、意識する必要はある。

構成要素

Broker

Kafka の本体。以下の Topic/Partition によって、Broker にイベントのデータが保管される。 Kakfa Producer はここにデータを送信し、Kakfa Consumer はここからデータを取得する。 基本的には複数台のクラスター構成となる。現状では、Zookeeper が複数台の Broker を管理する。

Topic

Broker 内でのデータの保存先の単位みたいなもの。 あるデータ群は Topic A に、また別のデータ群は Topic B に保存する、扱うデータの種類に応じて Topic を分ける、といった感じの使い方になると思われる。

Partition

1つの Topic に保存されるデータを、分散するための仕組み、というイメージ。 1つの Topic は複数のPartitionで構成されており、各 Partition は Broker 間で複製された複数の Replica で構成される。

Producer

Kakfa Broker 上の Topic の Partition へデータを書き込むためのクライアント。 Kafka へデータを書き込むアプリケーションは Kakfa Producer のライブラリを使用して、データを書き込む。

Consumer

Kakfa Broker 上の Topic の Partion からデータを取得/読み込むためのクライアント。 Kakfa からデータを取得するアプリケーションは Kakfa Consumer ライブラリを使用して、データを読み込む。

参考