検証サービスの解説
続いて野田氏は今回のシステムに関する各種サービスおよび連携の詳細について解説しました。全体像はこちらのイメージです。
オンラインレイヤの部分については、まずTwitterストリームからリアルタイムにデータを収集するところから始まります。取得したツイートはユーザー辞書を使い、単語単位で要素としてバラしてしまいます。ここでは日本語を分解する形態素解析ライブラリ「kuromoji」を使い、日本語文章を単語に分解し、集計させています。kuromojiではユーザー辞書を別途作成し取り込むことができるため、標準辞書にはない単語も処理対象に含められます。
単語にバラしたデータは件数上位のものをソートし、オープンソースの分散メッセージングシステムであるApache Kafkaに対して任意のサイクルでメッセージを投げています。一方でSparkとは関係のないシステムがKafkaからメッセージキューを受け取り、その内容をJSONに変換して、NGINXサーバにJSONを可視化したグラフを表示させる、という流れです。
また、KafkaのキューをAmazonのAPIに投げて結果を収集し、Twitterアカウントに対して通知させる、といったことも可能です。
今回のシステム構成に用いたプロダクトは以下です。左上の人型アイコンのサービスは分散アプリケーションの高パフォーマンスなコーディネートサービスのZookeeper。すべてのサービスが真ん中の端末から線が伸びているように、完全にスタンドアローンな構成を組んで実現することが可能です。
システム解説の後は、実際に構築したシステムのデモンストレーションが続きます。「Mikasa」と名付けられた、このシステムはGitHubに導入マニュアルがまとめられており、1時間程度で環境構築が行えるようになっています。興味がある方は必要な情報を揃え(Twitter APIとAmazon APIが必要)、ぜひインストールして試してみてください。
最後に野田氏は「今回作ったシステムはとても分かりやすく、作りやすい構成となっているのでSpark入門用の教材に最適だと思います。会社でもインターン生に活用してもらっていますし、興味のある方はぜひ試してみてください」とまとめ、セッションの発表を終えました。