■ はじめに
https://dk521123.hatenablog.com/entry/2023/04/23/235534
https://dk521123.hatenablog.com/entry/2023/04/24/153846
https://dk521123.hatenablog.com/entry/2023/04/26/103421
の続き。 今回は、Apache Kafkaの基本となる構成要素などについて扱う。
目次
【1】メッセージ 【2】システム構成 1)Producer (Publisher) 2)Broker 3)Consumer (Subscriber) 補足:Apache zookeeper 【3】論理構造 1)Topic 2)Partition 3)Replica 【4】Partitionの特徴 【5】Kafka API 1)Producer API 2)Consumer API 3)Connect API 4)Streams API (Kafka Streams) 5)Admin API
【1】メッセージ
* Kafka に送受信されるデータの基本単位 * 「イベント」、「レコード」と呼ぶ場合もある
ヘッダー(Header)
* イベントのメタデータや補足情報を格納
キー(Key)
* イベント格納先の振り分けや集約に使用されるデータ * キーを設定しないことも可能
タイムスタンプ(Timestamp)
* イベント作成時の時刻
値(Value)
* イベントで処理したいデータ本体 * 形式は様々(文字列、JSONなど)
【2】システム構成
* 大きく分けて、以下の3通りで構成。 [Producer(Publisher)]<=>[Broker]<=>[Consumer(Subscriber)]
1)Producer (Publisher)
* データをBrokerに対して、送信する側のアプリケーション
https://tech-lab.sios.jp/archives/32041
https://tech-lab.sios.jp/archives/32130
2)Broker
* Kafkaクラスタを構成するサーバ
3)Consumer (Subscriber)
* データをBrokerに対して、受信する側のアプリケーション
https://tech-lab.sios.jp/archives/32183
補足:Apache zookeeper
* Kafkaのメタデータを保持する ~~~~~ + Topicの一覧 + Topic の設定値 + Partition の状態 + Broker の一覧 + Broker のACL(Access Control List)の設定値 ~~~~~ * Zookeeper もクラスタ(複数)で構成
【3】論理構造
1)Topic 2)Partition 3)Replica
1)Topic
* Kafkaのイベントの送受信先 * Topic 名は、一意で区別される
2)Partition
* 分散処理のために、Topicを分割したもの * 各パーティションにメッセージを均等にする
補足:Offset
* Partition内で連続した番号
3)Replica
* 耐障害のために作られる各Patitionの複製
[1] Leader Replica
* Product/Consumerと直接やりとりするデータ
[2] Follower Replica
* 「Leader Replica」と常に同期をとっている耐障害に備えているデータ => サーバに障害が起きた際に、そのサーバに保持されていた「Leader Replica」の 代わりになるように控えている
【4】Partitionの特徴
[1] 同一Partitionでは、イベントの順序が送信順であることが 保証されている (例:Partition-2のOffset=12, Offset=13の配信タイムスタンプは前者が先) => ただし、Topic間のPartition間は順序は保証されていない [2] レプリケーションの冗長化(じょうちょうか) => 各Partitionのメッセージは、複数のBrokerにコピーされる => 一つのPartitionにつき、レプリカ内で書き込み可能なPartition (このPartitionを「Leader Replica」と呼ぶ)はひとつだけ => 「Leader Replica」のBrokerに障害が発生した場合、 別のBrokerにある「Follower Replica」が 「Leader Replica」として昇格する
【5】Kafka API
1)Producer API
* Topic にメッセージを送信するためのAPI
2)Consumer API
* Topic からメッセージを受信するためのAPI
3)Connect API
* DB、TwitterなどのデータシステムとKafka間で 継続的にメッセージを送受信するためのAPI * 詳細は、以下の関連記事を参照のこと
Apache Kafka ~ Kafka Connect ~
https://dk521123.hatenablog.com/entry/2023/04/29/185133
Apache Kafka ~ Kafka Connect / PostgreSQL ~
https://dk521123.hatenablog.com/entry/2023/05/02/233806
4)Streams API (Kafka Streams)
* Kafkaから読み取ったストリームデータを リアルタイムに処理するためのAPI
5)Admin API
* Kafkaクラスタの管理目的に使用されるAPI => 例えば、Topic, ACI, その他Brokerに関わる設定操作
関連記事
Apache Kafka ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/23/235534
Apache Kafka ~ 環境構築 / Docker compose編 ~
https://dk521123.hatenablog.com/entry/2023/04/24/153846
Apache Kafka ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/04/26/103421
Apache Kafka ~ Kafka Connect ~
https://dk521123.hatenablog.com/entry/2023/04/29/185133
Apache Kafka ~ Kafka Connect / PostgreSQL ~
https://dk521123.hatenablog.com/entry/2023/05/02/233806
Apache Kafka ~ 設定値 ~
https://dk521123.hatenablog.com/entry/2023/05/28/151212
Apache Flink ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/03/01/235100
Amazon MSK (Managed Streaming for apache Kafka)
https://dk521123.hatenablog.com/entry/2023/04/21/000000
Scala ~ Apache Kafka / Producer ~
https://dk521123.hatenablog.com/entry/2023/04/27/235703
Scala ~ Apache Kafka / Consumer ~
https://dk521123.hatenablog.com/entry/2023/04/28/014737