Apache Kafkaとは何ぞや ~Kafkaを支えるプラットフォーム~

こんにちは。エンジニアの南です。

これまでApache Kafkaについて、Kafkaの概要や、Kafka内部の構造について説明してきました。Kafkaはそれ自体だけでも十分に便利なプラットフォームですが、Kafkaを使いやすく、かつ便利にするために、Kafka外部と連携するツールが存在しています。今回はそんなツールについてや、それらのツールを取りまとめて提供しているConfluentについてお話していきたいと思います。

Confluentとは?

Apache KafkaはもともとLinkedIn社により作られ、その時の開発者が独立して立ち上げたのがConfluent社です。Confluent社ではApache Kafkaをさらに便利なものにするべく、Confluent Platformを提供しており、無償版の場合は以下のような機能を提供しています。

  • Producer、Consumer間のデータ整合性を確認する機能
    • schema registry
  • KafkaとProducer、Consumerの接続を容易にする機能
    • Kafka Connect
    • rest proxy
  • 条件に応じたデータを処理して整形する機能
    • ksqlDB

Kafka Connect

Kafkaでは幅広いユースケースがあるため、様々な種類の外部との連携が必要になってくることがあります。Kafka外部にあるプロダクトがkafkaに接続するのには、接続の設定を行わなければならず、それをいちいち各プロダクトが作業をするのは効率的ではありません。

Kafka ConnectではKafkaとの接続をプロダクトとKafka間に置くことですぐに接続ができるようになります。具体的には図のようにプロダクトとKafkaConnectの間ではConnectorを用いて接続し、KafkaConnectとKafkaとの間ではConnectAPIを使用して接続しています。

REST proxy

Kafkaは、java,scalaで開発されたプラットフォームであり、ProduceやConsumerがjava以外の言語のものであると運用がしにくいという問題があります。サードパーティ製のものであればある程度の言語には対応していますが、マイナーな言語だとそれにも対応しきれていないのは事実です。

rest proxyではHTTPSプロトコルを用いた送受信を行うことで、様々な言語で開発されたアプリケーションからデータを受け取ることができたり、kafkaと互換性のないconsumerへのメッセージ送信などが可能となります。

Schema registry

Kafkaでは、データ送受信能力に関しては申し分ないのですが、一方でデータを送信するときにconsumer側がどのようなデータセットを求めているのかは考慮していないため、もしproducer側で送信したデータの形式がconsumer側では互換性がない場合、受け取ろうとしたときに予期しないエラーが出る可能性があります。

そこで登場するのがSchema Registryです。これもrest proxyと同じくkafkaクラスターの外に存在します。動きとしては、Producerがデータ送信する際にデータ形式をSchema Registryに送信し、それらが互換性を持つかどうか判断します。

ksqlDB

ksqlDBは、Kafka用のストリーミングSQLエンジンです。kafkaでは大規模なデータが絶えずやりとりされており、ユーザ側が様々な目的で特定のデータを扱いたい場合がでてきます。ユーザ側がsqlをコーディングをしてksqlに命令をすることで、データのフィルタリング、変換、集約、結合、ウィンドウ化、セッション化など、幅広いストリーミング操作をサポートします。

要するに興味のあるデータを探す手間が省けたり、興味のあるデータ同士を比較して特徴を見出したりなどをしたい時に役に立ちます!便利ですね!

また、JavaやPythonなどのプログラミング言語でコードを書く必要はないため、言語学習にかかるコストを下げることができます。耐障害性に関してもksqlDBは優秀であり、障害発生時にデータを失うことなく稼働するうえに、データ量によらずスケーラブルに機能し続けます。

おわりに

今回はConfluent社が提供する外部ツールについて紹介しました。

最後までお読みいただきありがとうございました。