今回の記事では、大量のデータを取り扱うにあたって重宝されているApache Kafka について解説していきたいと思います。
Kafkaについて
何者?
Apache Kafkaとは、ひたすら流れ続ける情報(ストリーム)を大量に処理するイベントストリーミングプラットフォーム
であり、以下の特徴をもっています。
- 複数のマシンから構成(クラスター)されているため、マシンがダウンしても他のマシンが代わりに機能する・・・フォールトトレランス
- データ量に応じてクラスター内の数を調整する・・・スケーラビリティ
- データ一つ一つを失うことなく、正確に送受信(Exactly Once)するための設定ができる
何に利用されている?
kafkaは主に以下の用途で利用されています
- ログ収集
-
ログは非常に容量が大きいものになっている場合が多く、スケーラビリティを保証するKafkaがよく利用されます。
-
- webサービスのアクティビティトラッキング
- 顧客のweb上の動きや、商品購入情報などのデータを取り扱うことができます。
- 地図アプリ(カーナビ)などのリアルタイム情報の取得~抽出など
Kafka の構成
構成図と概要
Kafkaでは、大きく分けてメッセージを送信するProducerと、Producerからメッセージを受け取るCluster(Kafka本体)、Brokerからメッセージを受け取るConsumerの三つ存在します。
複数あるProducerからClusterにデータを集約させ、また複数のConsumerに向けてデータ送信しています。
このように1か所にデータを保存して任意の場所にデータ送信するシステムをキューイングシステムと呼び、以下のようなメリットがあります
- Producerが送信先を意識する必要がない
- 通信経路を単純化することで、通信路の拡張性が上がる
Clusterは以下のように複数のBrokerノードで構成されており、さらにその内部に下段で紹介するTopicやPartition、Replicaなどがあります。
Topic
Producerからのデータを種類ごとに保存する役割を持ちます。図ではTopicは一つだけですが、複数持つことも可能です。
Kafkaでは多くのデータのやりとりをするため、データの話題(Topic)ごとに分けることが必要になってきます。
Topicの例としては次のようなものがあります(商品通販サイトなどの場合)。
- 顧客の注文する品物を格納するTopic
- 注文をした顧客自身のデータを格納するTopic
またTopicでは負荷分散のため、複数のPartitionを持つことができます。
Partition
Topicの中に複数存在し、いずれかのパーティションにメッセージを均等に送信することで負荷を少なくします。
Replica
さらにPartitionは複数のReplicaから構成されており、そのうちの1つがLeader Replica、残りはFollower Replicaとなっています。
Leaderは唯一Producer,Consumerからのデータ送受信を行うことができるReplicaです。
一方でFollowerはLeaderからデータを複製し、Leaderのもつデータの状態と一致するようにします。
この、Leaderの状態と同じFollowerのことをIn Sync Replica(ISR)と呼びます。ISRにはLeaderも含まれます。
Leaderがダウンした場合、ISRであるFollowerからLeaderを選ぶことで耐障害性を保証します。
まとめ
Apache kafkaには、データ送信元となるProducerと、Kafka本体であるデータ保管場所のCluster、データを受け取るConsumerがあり、さらにCluster内部にはTopic,Partition,Replicaについて解説しました。
次回はProducer,Consumerについても掘り下げていきたいと思います。
お読みいただきありがとうございました!