SparkとKafkaを組み合わせで実現するリアルタイム処理基盤
そこでSparkとKafkaを採用しようというのである。SparkはSparkCoreモジュールとそれを利用したSparkSQL(SQLのインタフェースの提供)、GraphX(グラフ演算やグラフを操作機能を提供)、Streaming(ストリーミングデータ処理の提供)、MLib(機械学習アルゴリズムを提供)というコンポーネントから成る。HadoopでのMapReduceではスループットを重視し、バッチ処理に特化しているので、レイテンシに問題があったが、SparkとRDD&DAGで処理すると、Sparkはレイテンシを重視し、メモリ上で操作を行うので、「たとえ機械学習でも繰り返し処理が高速にできる」と田中氏は語る。
一方のKafkaはメッセージキューを扱うシステムで、「プロデューサー」「ブローカー」「コンシューマー」という3つの役割から構成されている。
プロデューサーはメッセージを格納する役割を担う。実際APIから直接Kafkaにキューイングする場合は、APIがプロデューサーになる。トピックスと呼ばれる単位でキューの制御が可能で、プロデューサーはトピックスに対してメッセージの送信を行う。
キューイングされたメッセージやトピックスの管理を行うのがブローカーで、これがKafkaの本体となる。そしてトピックスからメッセージを消費するのがコンシューマーで、Kafkaからメッセージを使って何らかの処理を行うという役割を担う。Sparkとの組み合わせでは、コンシューマーはSparkのアプリケーションとなる。
そのほか、バッチ処理を行うためのプログラムやデータをストリーミング配信するAPIなどがコンシューマーとなる。「コンシューマーはコンシューマーグループというグループをつくることが可能で、複数のコンシューマーごとに一貫したデータの処理が可能。これがKafkaの特徴」と田中氏は説明する。
実際のリアルタイム基盤はどのような仕組みになるのか。田中氏はデータのインプット先をKafkaに、従来のHadoopのクラスタ部分のHiveとMahoutをSparkに置き換えるという構成を提案。データのインプットとしてSparkから直接RDBを参照するように。SparkSQLではJDBC、ODBCをサポートしているので、Sparkから簡単にMySQLなどのDBを参照できるからだ。またデータの出力部分もKafkaを出力先とする。
こうしてKafkaをハブとすることで、各モジュール間の連携が極力疎結合となる。またビッグデータを活用するために、多様なデータの格納、大量のデータの受付を行えるよう設計すると「基盤活用の幅が広がるのでお勧めだ」と田中氏は言う。
そのためにはKafkaを利用してオンライン系システムから論理的に切り離し、それぞれの影響を最小限にすることだと田中氏は言う。あらゆるデータをKafkaに一旦集約することで、Spark側はKafkaのみに対応すればよいということになるからだ。また「障害からの分離にもなる」と田中氏は言う。ビッグデータ基盤は多くのミドルウェアやエコシステムの組み合わせで構築されているため、障害の頻度や種類も多様。たとえどこかのシステムに障害が発生してもKafkaをバスにそれぞれの世界を分離できれば、全体に影響を出すことなく安定したシステム運用が可能になるからだ。
さらにKafkaはコンシューマー側でデータの取得制御を行うため、同じトピックスから複数の処理を分けることができる。「この特徴をうまく生かすことで、新しい処理やアルゴリズムの検証などをアドホックに行うことができる」と田中氏は語る。
SparkとKafkaによるリアルタム基盤の活用例
実際、SparkとKafkaによるリアルタイム基盤の活用例も紹介。最初に紹介したのはSpark Streamingのみを活用して単純な集計処理を秒単位で実行するという構成例。これはWeb系やゲーム系の企業でよりリアルタイムなユーザーの反応をキャッチアップし、意思決定のためのPDCAの高速化に応用できるという。
次にRDBに既存資産があるケースについても紹介。すでにHadoopの基盤システムがある場合でも、HiveをSparkSQLに接続して利用することで、より高速に解析・判定処理ができるようになるという。「製造業や金融業など、既存データから新たな価値を生み出す施策や事業立ち上げ時に有効に使えるのでは」と田中氏は提案する。
第三はStreamingとMLibを組み合わせルことで、リアルタイムで流れてくるデータを判定処理し、ラベル付けを行うなどの活用も可能だという。このような処理はセキュリティや医療分野での異常値の検知にも応用できるのではという。
最後は大量トラフィックの反映パターンとしても「この基盤は活用可能だ」と田中氏は語る。というのもKafka自身が容易にスケールが可能なシステムだからだ。大量トラフィックをKafkaで受け、同時書き込みに特化したHBaseを組み合わせることで、秒間数10万~100万規模のトラフィックに耐えられる基盤ができるという。「このような基盤は今後、さらなるニーズが広がるとよそされるIoT分野に向けた施策として有効に使えるはず」と田中氏は言い切る。
最後に「ぜひ、リアルタイム処理を行う処理基盤にチャレンジしてほしい。そしてナレッジを共有しよう」と会場に呼びかけ、セッションを締めた。
お問い合わせ
日本アイ・ビー・エム株式会社
- TEL: 0120-550-210
- Apache Spark関連情報