ストリーム分析:Azureの分散ストリーム処理サービス
新しいAzureストリーム分析サービスのプレビューを発表させていただきます。これは、完全に管理されたリアルタイム分散型のストリーム計算サービスで、エンタープライズグレードのSLAを伴い、クラウドでのデータストリーミングを低遅延でスケーラブルに処理を行います。新しいAzureストリーム分析サービスは、スループットがわずか数KB/秒の小さなプロジェクトからストリームデータメッセージ/イベントがギガバイト/秒以上まで簡単にスケール調整します。
ストリーム分析の価格モデルにより、低費用で継続的に低スループットストリーミングワークロードを実行することができ、ビジネスニーズが増加した時のみスケールアップできます。ミッションクリティカルなビジネス継続を可能にする高速リカバリのためのイベント配信や状態管理も保証された上でこれを行います。
データのストリーム処理に対する開発が劇的に簡素化
ストリーム分析は、スケーラブルストリーム処理ソリューションを作成するために必要な開発者の専門知識レベルを劇的に下げるSQLのような言語をサポートしています。開発者は、数行のSQLを書くだけで、基本的なフィルタリング、一般的な分析操作、他の静的なデータソースとデータの複数のライブストリームの結合、ストリームパターン(またはその欠如)の検出などの共通操作が行えます。
これは、データのリアルタイムストリームに対して時間依存の計算を開発、維持、適用するのにかかる複雑性および時間を劇的に低減します。現在利用可能なほとんどの他のストリーミングソリューションは、複雑な独自のコードを書かなければなりませんが、Azureストリーム分析だと単純な宣言型の使い慣れたSQLが書けます。
セットアップが簡単な完全管理サービス
デバイス、センサ、インフラ、アプリケーションからのデータに対する貴重なリアルタイムの洞察や分析にかかる時間を、ストリーム分析では劇的に早めることができます。Azureポータルで数回クリックすると、ストリーミングパイプラインを作成して、その入力と出力を設定し、データに対して行いたいストリーム変換/分析を記述するSQLのようなクエリを提供できます。実行すると、全体のストリーミングパイプラインの規模/速度を監視し、必要なスループットおよび遅延が達成できるような調整が行えます。
「New」-「Data Services」-「Stream Analytics」を選択すると、Azureポータルで新しいストリーム分析ジョブが作成できます。
ストリーミングデータ入力のセットアップ
作成後の最初のステップは、ストリーミングデータ入力の追加になります。これにより、ストリーム処理を実行したいデータがどこから来るのかを示すことができます。ポータル内から、「Inputs」-「Add An Input」を選択すると、これを指定するウィザードが起動されます。
Azureイベントハブサービスを使用して処理を実行するためのデータストリームを配信できます。すでにイベントハブが作成されている場合は、上記のウィザードに紐づけられたリストから選択できます。また、イベントのハブで受信イベントをシリアル化するために使用する形式(JSON、CSV、Avroなど)も指定します。
セットアップの出力先
次のストリーム分析ジョブ開発ステップは、ストリーミングの出力先を追加することです。これにより、ストリーム処理パイプライン出力結果の行き先を設定します。ブロブストレージ、別のイベントハブ、SQLデータベースに簡単に結果を出力するために選択することができます。
ターゲットとして別のイベントハブが使用できるということは、複数のステップで複数のストリームを全体のパイプラインに接続する強力な方法が提供されているということです。
ストリーミングクエリの記述
これで入出力ソースが構成できたので、SQLクエリを記述して、受信入力(複数の入力ソースの場合はその入力一式)を変換、集計、関連付けして、出力ターゲットに出力することができます。これは、ポータル内で上部のQUERYタブを選択して行います。
データの入力ストリームを処理するために記述できる興味深いクエリは数多くあります。例えば、以下のようなJSON形式のデータになるIoTデバイスからイベントハブへJSONベースの温度データを送信するHTTP POSTコマンドの使用方法を、以前このブログのイベントハブセクションで示しました。
{ "DeviceId":"dev-01", "Temperature":"37.0" }
このように、複数のデバイスが同時にイベントハブにイベントをストリーミングしている場合、以下のシーケンスのような連続したデータイベントのストリームとして、ストリーム分析ジョブにフィードします。

もし代わりに時間窓の視点を使用してこのデータを分析できると面白いと思いませんか?例えば、各デバイスの平均温度が、複数の測定値の最後の5秒に出たものだったかをリアルタイムに計算するのに有用かもしれません。
ストリーム分析サービスで、以下のようなSQLクエリを書き込むことで、データの受信ライブストリームに対してこれを動的に計算できます。
SELECT DateAdd(second,-5,System.TimeStamp) as WinStartTime, system.TimeStamp as WinEndTime, DeviceId, Avg(Temperature) as AvgTemperature, Count(*) as EventCount
FROM input
GROUP BY TumblingWindow(second, 5), DeviceId
ストリーム分析ジョブでこのクエリを実行すると、以下のようにジョブに対して設定した出力ソースにデータ出力します(ブログストレージファイルやSQLデータベースなど)。

このアプローチの素晴らしいところは、イベントがストリームされているようにリアルタイムにデータが変換/集約されることで、毎秒ストリームされる文字通りギガバイトのデータイベントを扱うためにスケール調整します。
ストリーム分析ジョブのスケール調整
定義すれば、Azureポータルでストリーム分析ジョブのアクティビティを簡単に監視することができます。
SCALEタブを使用すると、ストリーム処理のスケール容量を動的に増減できます。これにより、必要な容量に対してのみ支払いが可能になり、ギガバイト/秒のストリームデータでもジョブを処理できるようになります。
ストリーム分析サービスの詳細について
ストリーム分析の詳細については、以下のリソースをご確認ください。





