気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Apache Kafkaとは?

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が送信する仕組みになっているので

参考URL