NTT DATA

DATA INSIGHT

NTTデータの「知見」と「先見」を社会へ届けるメディア

絞り込み検索
キーワードで探す
カテゴリで探す
サービスで探す
業種で探す
トピックで探す
キーワードで探す
カテゴリで探す
サービスで探す
業種で探す
トピックで探す
background-image-careers
2018年10月22日技術ブログ

KSQL ~「データ民主化」のためのSQLを用いた大規模ストリーム処理の実現~

データ分析の価値を、特定のターゲットではなく、より多くの人々で享受する「データ民主化」の取り組みの一環として「時々刻々と生じるストリームデータ」を流通させるパイプラインを構成する事例が増えてきました。本稿でご紹介するKSQLは、SQLライクな表現で記述し、メッセージングシステムであるApache Kafka(以降、Kafka)に保持されたストリームデータを時々刻々と処理するストリーム処理が可能となる技術です。登場したばかりですが、今後の成熟が期待されています。

背景:「データ民主化」における「ストリーム処理」とは

近年、データレイク(多種、大量のデータをそのままの形で蓄積する蓄積基盤)の活用ケースの増加とともに、データサイエンスの知識がないユーザーにまでデータを開放し、それぞれのアイデアでの活用を試み、データの価値を多数のメンバで享受するための「データ民主化」が注目されています。エンジニアリング観点でのデータ民主化のポイントが<イマ旬:「データ民主化」を支えるデータエンジニアリング>(※1)内で紹介されていますが、ストリーム処理は「多様なデータ処理要求の実現」という論点で考えることができます。
「データ処理」というと、どこかに溜められたデータを処理することをイメージするかもしれません。それは間違いではなく、「データを溜める」、「処理する」、「結果を保存する」という「バッチ処理」は世の中に多数存在するでしょう。

図1:バッチ処理では一度保存してまとめて処理する

図1:バッチ処理では一度保存してまとめて処理する

しかし、仮にその処理が1か月単位、1日単位、数時間単位であり、処理内容が「非常に大きなECサイトの売り上げ集計と予測」だったらどうでしょうか。本当は、購買者の意欲が失われるまでの間に「速報」に基づくキャンペーンを打てるかもしれません。また、非常に大きなECサイトにおいては、一瞬の機会損失でも大きな数字になることもありえます。このように「時々刻々と生成されるデータを逐次処理して生かしたい」という「ストリーム処理」を利用してビジネスに付加価値をもたらしたいという需要があることは容易に想像できます。

図2:ストリーム処理では時々刻々と生じるデータを逐次処理して活用する

図2:ストリーム処理では時々刻々と生じるデータを逐次処理して活用する

ストリーム処理のプラットフォームとその難しさ

近年、Kafkaに代表されるスケールアウト可能なストリーム処理のプラットフォームが登場したおかげで、大規模なストリームデータ処理のシステムを実現することが現実的になってきました。データ活用に関する著名な国際カンファレンスでも、そのような事例を見かけることが多くなっています。例えばNTTデータが支援した<リクルートライフスタイル様のデータハブ事例>(※2)、<ChatWork様のメッセージング基盤事例>(※3)が挙げられます。
ただし、このような事例においてストリーム処理を実装するためには、ストリーム処理のAPIを持つライブラリを用いてアプリケーションを開発する必要があります。以下にその例を示します。
(引用元:https://kafka.apache.org/documentation/streams/(外部リンク))

図3:ストリーム処理のアプリケーションの例

図3:ストリーム処理のアプリケーションの例

もちろん、ストリーム処理向けのライブラリが存在しなかったときと比べて、開発は相当に効率的になったとはいえ、「もう少し気軽に試行錯誤したい」という思いが生まれるのが自然です。また、「データ民主化」の観点では、アプリケーションを開発しない人にもストリームデータの恩恵を受けられるようにしたいと思うところです。

KSQLの登場

KSQLは2017年に米Confluentが公開したSQLライクな表現で処理内容を記述し、Kafkaに保持されたストリームデータを処理できるプラットフォームです。まだまだ登場したばかりであり、今後の成熟が待たれる技術ですが、前節で紹介した「気軽に試行錯誤したい」、「アプリケーションを実装せずに処理を実現したい」という思いに応えられる期待が持たれる技術です。
KSQLは大まかに以下のような構成で成り立ちます。

図4:KSQLはサーバ・クライアント構成でKafkaのクライアントとして機能する

図4:KSQLはサーバ・クライアント構成でKafkaのクライアントとして機能する

上図のように、KSQLのサーバはKafkaにとってのクライアントとして機能します。KSQLのサーバにはCLI等を通じて接続し、「SELECT a, b, c …」のようなSQLライクな表現でストリーム処理を投入できます。なお本稿では詳細は割愛しますが、SQLライクな表現で記述された処理からKafka StreamsというKafkaのプロジェクトに含まれるストリーム処理のライブラリのAPI呼び出しを用いたプランが生成され、最終的にKafka Streamsを用いたストリーム処理が実行されます。

図5:最終的にKafka StreamsのAPI呼び出しのプランが生成されて実行される

図5:最終的にKafka StreamsのAPI呼び出しのプランが生成されて実行される

このようにKafkaやKafka Streamsの機能を内部的に生かしながら、シンプルな仕掛けで簡潔にストリーム処理を実現できるように工夫されています。

おわりに

本稿では、データ民主化の背景を起点として、ストリーム処理を実現する技術KSQLについて紹介しました。KSQLは多様なデータ処理要求に応える一環として、ストリームデータの恩恵を誰しもが受けられるようにするためのインターフェースとなりえる技術と言えます。まだ登場したばかりの技術ではありますが、今後の成熟に期待が持たれます。

なお、当組織メンバが執筆した「Apache Kafka 分散メッセージングシステムの構築と活用 」が2018年10月に出版予定です。この書籍はKafkaの基本に始まり、ユースケースを題材としたサンプルまで紹介する内容が記載されています。本稿で紹介したKSQLについても触れられていますので、よろしければお手に取っていただければと存じます。

書籍へのリンク https://www.seshop.com/product/detail/22007(外部リンク)

  1. ※1 http://www.nttdata.com/jp/ja/insights/blog/20180824.html
  2. ※2 https://conferences.oreilly.com/strata/strata-ny/public/schedule/detail/69164(外部リンク)
  3. ※3 https://kafka-summit.org/sessions/worldwide-scalable-resilient-messaging-services-kafka-kafka-streams/(外部リンク)
お問い合わせ