Apache Kafkaとは何ぞや

はじめまして、エンジニアの南です。

皆さんは「ビッグデータ」という言葉をご存じですか?
大きいデータ、つまりは膨大な量のデータをのことを指します。膨大なデータ量ということでそれらを処理することは時間がかかってしまいますし、管理ミスが起きてしまう危険性もあります。昨今のデータ需要に応えるためには、膨大なデータを「素早く、正確に」処理をし続けることが求められます。

そこで今回はそんなわがままにも応えられてしまうメッセージングツール「Apache Kafka」をご紹介します。

Apache Kafkaの概要

覚えておくとわかりやすい横文字

私が見てきた「Apache Kafka」の解説はどれも横文字が多かったため、このブログでは意味をわかってもらえるように、Apache Kafkaで理解するうえで覚えるべき横文字をリストアップしてみました。

  • スループット
    • データ処理する速さ
  • リアルタイム
    • 即時に処理すること
  • スケーラビリティ
    • 扱うデータ量によって負荷を予測し、それによって計算に必要な「脳」の数を調整できる能力
  • スケールイン
    • 「脳」の数を減らす
  • スケールアウト
    • 「脳」の数を増やす

これらを覚えておくと、他サイトでApache Kafkaを調べる際にきっと役に立つと思います。

どんなツール?

Apache Kafkaとは、高スループット、スケールアウト性をもったメッセージング送受信基盤であり、膨大なデータ量に対してもリアルタイムに処理が可能です。

データを流す側(Producer)とデータをもらう側(Consumer)とすると、Kafkaはその間を取り持つような関係(Broker)になります。この間を取り持つことで、以下のようなメリットが得られます。

  1. Producer、Consumerそれぞれが非同期でメッセージの送受信ができる
    1. ProducerとConsumerがデータ送受信の際に互いの影響を受けない
  2. 送受信先をたった一つにすることができる
    1. メッセージ経路が簡潔となる

1つ目に関しては受信側で考えてみると分かりやすいと思います。
メッセージの送受信は通常では同期的(メッセージが送信されたら、瞬時に受信される)です。しかし受信側が何らかの原因で動作していない場合、メッセージが来たとしても受信することはできません。これは同期的な送受信のデメリットであるといえます。一方で受信側都合でメッセージが受け取れればこの問題は解消します。これが非同期なメッセージ送受信と呼ばれます。

2つ目に関しては送信側で考えてみましょう。
送信側にとっては送り先が多くなってしまうと誰に対してメッセージを送るべきかを考えなくてはなりません。しかし、送り先が「Kafka」一択となると、何も考えずにメッセージ送信ができるようになるのでこれは便利です。

非同期通信の例
送信先をひとつに!

Kafkaが使われる場面として一番あげられるのが、Webサイト上のユーザによるアクティビティを、ログ処理することによって得るという場面です。
具体的にはユーザがどんな検索のキーワードを使っているか、webサイトでどのボタンを押しているか、などが該当します。ユーザはたくさん多く、さらにその人数分のwebサイトでの活動と考えると当然これらのログは莫大な量となります。

そこで、多量なデータに対しても高スループットを維持し、求めている情報を取得することのできるKafkaが適任といえるでしょう。

なぜApache Kafkaか?

Apache Kafkaについて概要を書いていきましたが、このような間をとりもってメッセージを取り扱うというツールは過去にもたくさん出てきました。これらと比較してなぜApache Kafkaが良いのかを書いていきたいと思います。

メッセージングツールとしての強み

メッセージングツールとは先ほどもあったようなProducerとConsumerの間を取り持つツールのことを指します。例を出しますと、RabbitMQなどがあります。

ただし、多くのMQには、スケールアウトが容易にはできず、メッセージが大量に送られてくることを前提に作られていないため、多くのデータを取り扱う現代では用途が限定的であるのです。Apache Kafkaであれば、前述したようにスケールアウトが可能であるため、データの大きさに応じてリアルタイムに処理ができるようになっています。

ログ収集ツールとしての強み

前述したメッセージングツールでは来たデータ量に応じてスケールアウトができないという問題がありました。そこで、ログ収集としての強みを持たせてあげることで対応しています。

ログ収集はウェブサイトトラッキングやメトリクスなど、大量のデータになるようなものに対して行うものであるので、状況に応じて複数のサーバーが立ち上がることでスケールアウトを可能としています。しかし過去に作られてきたログ収集ツールではメッセージングの良さである、受信者が好きなタイミングでデータを受け取るということが難しい課題があります。そこでメッセージングの良さを取り入れることでこれをカバーしています。

このようにお互いのデメリットを克服した形がApache Kafkaなのです。

おわりに

Apache Kafkaについて、簡単に概要と他ツールと比較してのメリットについて触れましたが、いかがだったでしょうか。

次回はApache Kafkaの中身について掘り下げていきたいと思いますので、ご興味がありましたらぜひご覧ください。