Apache Kafkaとは?
複数台のサーバーで大量データを処理する分散メッセージングシステムのこと。
メッセージングシステム
リアルタイムに生成される大量データを中継するシステムのこと。
データ生成場所とデータ利用場所が複数ある場合、そのデータを直接やり取りすると複雑になっていくため、一時的にデータを貯めて置く場所としてこのシステムは使われる。
利用メリット
- データ生成場所・データ利用場所ともに接続先を一つにできるため、シンプルな構成にできる。
- 新しい データ生成場所・データ利用場所が作られてもメッセージングシステムに繋げば良いだけなので実装コストを下げられる。
Apache Kafkaの構成
構成要素 | 説明 |
---|---|
Broker | データを送受信するサービスで中継役 |
Message | Kafkaが受診し送信するデータの単位 |
Producer | データの送信元。BrokerにMessageを送信する |
Consumer | データの送信先。BrokerからMessageを取得する |
Topic | Mesageを種類ごとに管理するためのストレージ。Broker上で管理 |
Apache Kafkaの特徴
分散システム
データ量が増えてくると障害時にデータ欠損やデータ送信失敗となったりする。これらに対応するために分散システムを実現している。
構成要素 | 説明 |
---|---|
Partition | Topicを細分化する単位 |
Replica(Leader) | Partitionの複製。Producerからメッセージを受信、Consumerに送信する。各Partitionに必ず一つ存在 |
Replica(Follower) | Partitionの複製。Leader Replicaからメッセージを取得して複製。障害時に送信する |
- 各Replicaは異なるBrokerに配置されることで分散処理を実現
- 一つのMessageの複製が複数サーバーで管理される
分散システムのメリット
- スケールアウト可能:Brokerを増やしPrtitionを再配置することで役割の分散と性能向上を実現できる
- データ欠損の低減:別Brockerにデータの複製があるため、障害が発生してもデータがなくならない。Leaderで障害が発生してもFollowerがLeaderの役割を引き継ぐためデータ送受信を継続できる
データの永続化
KafkaではBrokerがProducerからMessageを受け取ると、ディスク上へ保存する。これによりConsumerは任意のタイミングでMessageを取り出し可能になります。
データ永続化によるメリット
- バッチ化の実現
- Brocker上に溜まった複数MessageをConsumerが一括受信する。データを順次処理するストリーム処理なども実装かのう
- Consumber障害発生時のBrokerへの影響が少ない
- Consumerが障害となってもBroker側でデータ送信停止などがいらない。Consumerからのリクエストに応じてBrockerが送信する仕組みになっているので