【Kafka】Apache Kafka ~ 入門編 ~

■ はじめに

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
ScalaApache Kafka / Producer ~
https://dk521123.hatenablog.com/entry/2023/04/27/235703
ScalaApache Kafka / Consumer ~
https://dk521123.hatenablog.com/entry/2023/04/28/014737