Confluent Japan Community Blog

Confluent Japan Community が提供するストリーミングデータを扱うConfluent、Apache Kafkaに関する情報を提供します。

Confluent Japan Community が提供する apache Kafka および Confluent に関するブログ

Apache KafkaとConfluent

- リアルタイムなストリーム処理の実現 -

 

・ストリーミングデータ処理するプラットフォーム

前回の記事ではリアルタイムにデータを活用することがどのようにビジネスの可能性を広げるかをお伝えしました。これらについては様々な手法があります。ストリーミングデータの処理を行う際に問題になるのは、一定時間に流れるデータ量が膨大であること、不定期に実行される処理であること、様々なデータ種別が存在することなどが挙げられます。

 

大きなポイントとしては、大量のストリーミングデータを取り扱うプラットフォームは、さまざまなデータフォーマットさえ異なる入出力をまとめながら、データの増加に応じてスケールアウトが可能であり、発生したデータに対して低レイテンシでの処理が可能なものである必要があります。

 

これらの柔軟な処理を実行することができる一つのソリューションが、オープンソースApache Kafka(以下Kafka)とKafkaをベースにした商用パッケージを提供しているConfluentになります。

 

・Kafkaの紹介と有用性

Apache Kafka(以下Kafka)は、オープンソースのストリーム処理ソリューションです。Kafkaは、2011年にアメリカのソーシャルネットワークサービスであるLinkedInからリリースされたオープンソースソフトウェアになります。LinkedInでは、社内で乱立していたデータのソースとその利用者をつなぐメッシュ状の依存を一つのhubに統一することが必要でした。このつながりがビジネスをより加速ためには必要不可欠な要素であったからです。オープンソースソフトウェアとして公開されたKafkaは、その後多くの企業で採用され、今日ではFortune500の1/3の企業を含む数千の企業に利用されています。

Apache Kafka Ver1.0 リリース
https://www.confluent.io/blog/apache-kafka-goes-1-0/

 

こちらは、2011年1月11日に発表された際のリリース内容です。

https://blog.linkedin.com/2011/01/11/open-source-linkedin-kafka

 

このリリースには、従来のキューイングシステムなどにはない特徴として、以下の3つの部分を設計理念としていると書かれています。

 

  1. データを入力する、出力する双方に対してシンプルなAPIが提供されていること
  2. ネットワーク転送とディスクのオーバーヘッドが少ないこと
  3. スケールアウトされたアーキテクチャであること

 

この設計理念に基づき、Kafkaは送られてくるデータを受け取り、必要に応じてそのデータを必要とするところに送ることが可能となっています。

Kafkaには3つの大きな構造があります。データを送ってくる送信元をProducerと呼び、それらを受け取り、データを保存、配布する役割を担うものをBrokerと呼びます。さらにBrokerにデータをリクエストし、処理するために取得する側をComsumerと言います。これらの3つの主構造にて構成されるものとなります。大きなポイントになるのは、このBrokerである。Brokerがあることで2つのメリットを受けることが出来ます。

 

  1. 送信元、配信先の双方は接続先を一つにすることが出来ます。
    1. 送信元(Producer)は、Brokerに対してデータを配信します。通常では、その先でどのような処理をするかをベースに送信先に依存した形式を取り扱わなくてよいことに加えて、複数の送信先が存在する場合にも、それらに対して独立して複数回送信処理を行わなくてもよいことも非常にリソースの効率、送信先のエラー波及の観点から大きなメリットです。逆に配信先(Comsumer)側のメリットとして大きいのは、Brokerがバッファとして機能してくれるため、データの発生側のペース(突発的なデータ量の増加など)にかかわらず、一定の速度でデータを処理し続けられる点です。

  2. システムが柔軟になり拡張性が高まる。
    1. 新たなProducerを追加(新しいdataを投入)する際にすることは、”topic”を生成することのみです。また、既存の”topic”に対して新たなConsumerを追加する際には、Broker側での作業は一切する必要がありません。(ACLなどの設定を除く)。また、Brokerサーバーを追加することでトラフィックに対して柔軟にスケールアウトすることができます。この際にシステムの停止は伴わないことから他の処理に影響を及ぼさずに行うことができます。

f:id:Confluent:20190227194825p:plain


 

Kafkaは、Producer、Broker、Comsumerという3つの主構成を持ち、これらが生み出す上記の利点を提供するだけでなく、スケールアウトしてデータ量などに応じた拡張性を保持するように作られています。

アーキテクチャの中心にはBrokerがあり、Brokerがデータの入力、保存と配信(Publish)を行っています。Producer、Broker、Consumerが協調(Partitioningなど)することでスケーラビリティを実現しています。

そして、Kafkaが実現したもう一つの大きなポイントはデータの永続性になります。従来のキューイングシステムは、送信元から受け取り、配信先に配信するという一連の流れを実行してデータが消えていくのが一般的でした。しかし、Kafkaはそれらのストリーミングデータを蓄積し、永続的に保持することが可能になっています。

 

このように、今までのメッセージキューの仕組みは、データの受け渡しにフォーカスされた仕組みであったのに対して、スケールアウトの構成を持ち、データを永続的に保持できることと一度書き込まれたデータを複数回読み出すことができる部分がKafkaの特長になります。

 

参考資料:

It’s Okay To Store Data In Apache Kafka

https://www.confluent.io/blog/okay-store-data-apache-kafka/

Getting Your Feet Wet with Stream Processing

https://www.confluent.io/blog/stream-processing-part-1-tutorial-developing-streaming-applications

 

・商用利用も可能なApache Kafkaと開発企業のConfluent

Confluent社は、LinkedInにおいてKafkaの開発を始めたメンバーが創設した企業です。現在もApache Kafkaのコミッターのうち多数がこのConfluentに在籍しています。

そのConfluent社は、Kafkaを基盤としたプラットフォームを提供しており、Kafkaを拡張したConfluent Open Sourceをはじめ、商用パッケージ(Confluent Enterprise)及びクラウド環境の提供(Confluent Cloud)を行っています。

Kafkaには分かりやすく豊富なAPIがあります。Kafkaには、さまざまなデータソースと接続することができるようにコネクターが提供されています。商用利用可能な様々なコネクターをKafka Connect として提供しており、Kafkaコミュニティではデフォルトのパッケージ以外の複数のコネクタを提供しています。さらに、Confluentが提供しているオープンソースパッケージでは、上記のコネクターの一部がプリセットされていたりRESTプロキシーでの接続等、様々な仕組みを提供しています。

Kafka のコミュニティに名を連ねている企業も世界を代表するデータを有益に利用している企業です。それらの企業が自社のサービスをより良くするためにどのようにデータを活用するかを考えた上、現在利用しているツールがKafkaになります。Kafkaは多くのデータ利用を行っている企業にも信頼されているソリューションです。

 

f:id:Confluent:20190227195730p:plain

 

Confluent社が提供する商用パッケージである「Confluent Enterprise」および「Confluent Cloud」については、問い合わせ窓口やテクニカルサポートなどの商用利用において必要なサポートが備わっています。それだけでなくデータのセキュリティでは一番厳しく管理される金融企業なども利用できるような高度な機能が提供されています。

詳細は今後記事で書いていきます。以下は2018年12月現在の比較のConfluentプラットフォームの比較表になります。現在は一部に変更が入っておりますのでご注意ください。

参考資料

ライセンスの変更について

https://www.confluent.io/blog/license-changes-confluent-platform

f:id:Confluent:20190227200202p:plain

まとめ

Apache KafkaとConfluentとでは、オープンソースコミュニティと商用パッケージ提供企業という点で違いはあるが、どちらもベースはApache Kafkaであり、双方ともにConfluent社が多くを提供しており、バージョンアップが繰り返されています。

Confluentは、エンジニアリングも含めて提供されているため、それらも含めて利用したい企業としてはConfluentを選択するのがよいと考えます。

次回からはストリーミングデータにおける様々な技術的な課題を解説します。