Apache Kafka シリーズ ~そもそもKafkaって?~

kafka

今回の記事では、大量のデータを取り扱うにあたって重宝されているApache Kafka について解説していきたいと思います。

 

Kafkaについて

何者?

Apache Kafkaとは、ひたすら流れ続ける情報(ストリーム)を大量に処理するイベントストリーミングプラットフォーム

であり、以下の特徴をもっています。

  • 複数のマシンから構成(クラスター)されているため、マシンがダウンしても他のマシンが代わりに機能する・・・フォールトトレランス
  • データ量に応じてクラスター内の数を調整する・・・スケーラビリティ
  • データ一つ一つを失うことなく、正確に送受信(Exactly Once)するための設定ができる

何に利用されている?

kafkaは主に以下の用途で利用されています

  • ログ収集
    • ログは非常に容量が大きいものになっている場合が多く、スケーラビリティを保証するKafkaがよく利用されます。

  • webサービスのアクティビティトラッキング
    • 顧客のweb上の動きや、商品購入情報などのデータを取り扱うことができます。
  • 地図アプリ(カーナビ)などのリアルタイム情報の取得~抽出など

Kafka の構成

構成図と概要

Kafkaでは、大きく分けてメッセージを送信するProducerと、Producerからメッセージを受け取るCluster(Kafka本体)、Brokerからメッセージを受け取るConsumerの三つ存在します。

kafka概要図

複数あるProducerからClusterにデータを集約させ、また複数のConsumerに向けてデータ送信しています。

このように1か所にデータを保存して任意の場所にデータ送信するシステムをキューイングシステムと呼び、以下のようなメリットがあります

  • Producerが送信先を意識する必要がない
  • 通信経路を単純化することで、通信路の拡張性が上がる

Clusterは以下のように複数のBrokerノードで構成されており、さらにその内部に下段で紹介するTopicやPartition、Replicaなどがあります。

                                                                                                 Cluster内部図

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についても掘り下げていきたいと思います。

お読みいただきありがとうございました!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です