全般

Q: Amazon Kinesis Data Analytics とは何ですか?
Amazon Kinesis Data Analytics は、ストリーミングデータの分析、実用的なインサイトの取得、ビジネスやお客様のニーズへのリアルタイムでの対応を最も簡単に行えるサービスです。Amazon Kinesis Data Analytics を利用すると、ストリーミングアプリケーションを構築し、管理し、AWS のサービスと統合する作業がシンプルになります。一般的な処理関数のための組み込みのテンプレートや演算子を利用し、SQL クエリと高度な Java アプリケーションを簡単に構築し、あらゆる規模のデータを整理、変換、集計、分析できます。
 
Amazon Kinesis Data Analytics では、クエリを継続的に実行するために必要なものすべてが提供され、受信データのボリュームとスループットレートに応じて自動的にスケールされます。Amazon Kinesis Data Analytics では、ストリーミングアプリケーションで消費されたリソースのみが課金の対象となります。最低料金や初期費用はありません。
 
Q: リアルタイムストリーム処理とは何ですか? なぜそれが必要ですか?
リアルタイムデータソースが爆発的に増加したことから、ユーザーの元にデータが届くスピードも超高速になりました。モバイルやウェブアプリケーションからのログデータであれ、e コマースサイトからの購入データであれ、IoT デバイスからのセンサーデータであれ、データの種類に関係なく、会社が顧客、組織、ビジネスの現在の状態を把握するために役立つ情報がデータとして届けられます。届いたデータを可視化することで、ビジネスをリアルタイムで監視し、新しいビジネスチャンスを活用できます。たとえば、顧客が特定の時間にいる場所に基づいてキャンペーンを提供したり、社会的感情を監視したり、顧客の姿勢を変えさせたりすることで、新しい機会を見つけ、それに基づいて行動します。
 
このようなチャンスを活かすには、保管された静的なデータに対してこれまでに公開されている分析ツールより、リアルタイムのストリーミングデータを収集、分析できる別の分析ツールセットが必要です。従来の分析では、情報を収集し、データベースに保管して、数時間、数日、または数週後に分析していました。リアルタイムデータの分析には、異なるアプローチ、ツール、サービスが必要です。ストリーミング分析サービスでは、保管されたデータに対してデータベースクエリを実行するのでなく、データが保管される前に連続的に処理されます。ストリーミングデータは、ひっきりなしに増減し、驚くべき速度で流れます。ストリーミング分析サービスは、通常、1 時間あたり数百万イベントのスピードで届いたデータを処理できなければなりません。
 
Q: Kinesis Data Analytics でできることは何ですか?
Kinesis Data Analytics はさまざまなユースケースで使用し、データを継続的に処理したり、数日や数週間待つことなく数秒または数分で分析情報を得たりすることができます。Kinesis Data Analytics では、ログ分析、クリックストリーム分析、IoT、アドテク、ゲームなどを用途とするエンドツーエンドストリーム処理アプリケーションを簡単に構築できます。一般的なユースケースには、ストリーミング ETL (Extract-Transform-Load/抽出、変換、読み込み)、継続的メトリック生成、応答分析の 3 つがあります。
 
ストリーミング ETL
ストリーミング ETL アプリケーションでは、データレイクやデータウェアハウスを読み込む前に、未加工データを洗浄、拡充、整理、変換でき、一括 ETL 手順を減らすか無くすことができます。配信前に小さなレコードを大きなファイルにバッファリングしたり、ストリームやテーブルをまたいで高度な連結を実行したりできます。たとえば、Amazon Kinesis Data Streams に保存されている IoT センサーデータを継続的に読み込むアプリケーションを構築し、センサーの種類別にデータを整理し、指定したスキーマでデータを正規化し、それから Amazon S3 にデータを配信するアプリケーションを構築できます。
 
継続的メトリック生成
継続的メトリック生成アプリケーションでは、データの経時的な傾向を監視し、理解できます。アプリケーションでストリーミングデータを集めて重要な情報を引き出したり、報告用データベースや監視サービスとつなぎ目なく統合し、アプリケーションやユーザーにリアルタイムでサービスを提供したりできます。Kinesis Data Analytics では、複数の時間枠にまたがって連続的に時系列分析を生成する SQL または Java コードを利用できます。たとえば、モバイルゲームのトッププレーヤーを毎分決定して Amazon DynamoDB に送信することで、リアルタイムの順位表を作成できます。あるいは、5 分ごとにウェブサイトの一意の訪問者数を計算し、処理した結果を Amazon Redshift に送信することで、ウェブサイトのトラフィックを追跡することもできます。
 
リアルタイム応答分析
リアルタイム応答分析アプリケーションは、特定のメトリクスが事前定義しきい値に到達したときや、より高度な例では、機械学習アルゴリズムを使用してアプリケーションによって異常が検出されたときに、リアルタイムのアラームまたは通知を送信します。このようなアプリケーションでは、ユーザーがモバイルアプリを断念するのを予測し、劣化したシステムを特定するなど、ビジネスにおける変化にリアルタイムですぐに対応できます。たとえば、アプリケーションで、時系列における顧客向け API の可用性または正常終了率を計算して、その結果を Amazon CloudWatch に送信できます。また、特定の基準を満たすイベントを検出し、それを Amazon Kinesis Data Streams と Amazon Simple Notification Service (SNS) を使用して適切なユーザーに自動的に通知するアプリケーションを作成することもできます。
 
Q: Kinesis Data Analytics 向け Java アプリケーションはどのように利用を開始できますか?
Amazon Kinesis Data Analytics コンソールにサインインし、新しいストリーム処理アプリケーションを作成します。 AWS CLIAWS SDKs を使用することもできます。アプリケーションを作成したら、お気に入りの統合開発環境に進み、AWS に接続し、オープンソースの Java ライブラリをインストールします。オープンソースライブラリは Apache Flink (データストリームを処理するためのオープンソースのフレームワーク/処理エンジン) と AWS SDK を基盤とします。拡張可能なライブラリには、ウィンドウやアグリゲートなどのあらかじめ構築された 25 以上のストリーム処理演算子および Amazon Kinesis Data Streams や Amazon Kinesis Data Firehose などの AWS サービス統合が含まれています。構築後、コードを Amazon Kinesis Data Analytics にアップロードすれば、このサービスによりリアルタイムアプリケーションを継続的に実行するために必要なものすべてが提供されます。たとえば、受信データのボリュームとスループットに応じて自動的にスケールされます。
 
Q: Kinesis Data Analytics 向け SQL アプリケーションはどのように利用を開始できますか?
Amazon Kinesis Data Analytics コンソールにサインインし、新しいストリーム処理アプリケーションを作成します。 AWS CLIAWS SDKs を使用することもできます。エンドツーエンドアプリケーションは次の 3 つのシンプルなステップで作成できます。1) 受信ストリーミングデータを設定する、2) SQL クエリを作成する、3) 結果のロード先を指定する。Kinesis Data Analytics では、JSON、CSV、および TSV などの標準的なデータ形式が認識され、ベースラインスキーマが自動的に作成されます。このスキーマは改良することができます。また、データが非構造的である場合は AWS の直感的で使いやすいスキーマエディタを使用して新しく構築することも可能です。続いて、このサービスにより、入力ストリームにスキーマが適用され、入力ストリームが絶えず更新される SQL テーブルのように表示されるので、これに対する標準的な SQL クエリを作成することもできます。クエリを作成する際は、当社の SQL エディタを使用してください。
 
SQL エディタは、ライブデータに対する構文のチェックおよびテストなど、すべての付加機能と一緒に同梱されています。また、シンプルなストリームフィルターから高度な異常検出ならびに top-K 分析まで、何でも行える SQL コードが記述されたテンプレートも利用できます。Kinesis Data Analytics により、すべてのインフラストラクチャのプロビジョニングが実行され、どのようなデータスループットでも処理できるように伸縮自在にスケーリングされます。インフラストラクチャの計画、プロビジョニング、または管理は必要ありません。
 
Q: Kinesis Data Analytics の制限事項は何ですか?
Kinesis Data Analytics により、アプリケーションが大半のシナリオにおける複雑なクエリとソースストリームのデータスループットに対応できるように、伸縮自在にスケールされます。サービスの制限に関する詳細については、「Amazon Kinesis Data Analytics for SQL Developer Guide」の Limitsを参照してください。 Java アプリケーションのサービス Limitsに関する詳細については、「Amazon Kinesis Data Analytics for Java Developer Guide」の「Limits」セクションを参照してください。

主要な概念

Q: Kinesis Data Analytics アプリケーションとは何ですか?
アプリケーションは、ユーザーが操作する Kinesis Data Analytics エンティティです。Kinesis Data Analytics アプリケーションでは、ストリーミングデータがリアルタイムで連続的に読み込まれて処理されます。アプリケーションのコードは、SQL または Java を使用して、受信ストリーミングデータを処理し、出力を生成するように作成します。このコードにより、Kinesis Data Analytics では処理結果が設定された出力先に書き込まれます。
 
各アプリケーションは、3 つの基本的コンポーネントで構成されています。
 
入力 – アプリケーションのストリーミングソース。入力の設定では、ストリーミングソースをアプリケーション内データストリームにマッピングします。データはデータソースからアプリケーション内のデータストリームに流れます。アプリケーションコードを利用してこのようなアプリケーション内データストリームからのデータを処理し、処理したデータを後続のアプリケーション内データストリームなどのデータの宛先に送信します。Java アプリケーションのアプリケーションコード内で、また、SQL アプリケーションの API 経由で入力を追加します。
 
アプリケーションのコード – 入力の処理と出力の生成を行う一連の Java 演算子または SQL ステートメント。最も単純な形状では、アプリケーションコードは、ストリーミングソースに関連付けられているアプリケーション内データストリームから読み込み、出力に関連付けられているアプリケーション内データストリームに書き込む 1 つの Java 演算子か SQL ステートメントになります。最初のアプリケーション内データストリームを複数のストリームに分割し、それらの個々のストリームに追加ロジックを適用する Java または SQL コードを記述できます。
 
出力 – 中間結果を格納する 1 つまたは複数のアプリケーション内ストリームを作成できます。その場合、特定のアプリケーション内ストリーム内のデータを外部の出力先に保存するように、アプリケーションの出力を設定できるオプションもあります。Java アプリケーションのアプリケーションコードまたは SQL アプリケーションの API 内でこのような出力を追加します。
 
Q: アプリケーション内データストリームとは何ですか?
アプリケーション内データストリームは、処理の実行対象となるデータを絶えずアプリケーションに保存するエンティティです。アプリケーションは継続的にアプリケーション内データストリームとの間で読み書きします。Java アプリケーションの場合、ストリーム演算子経由でデータを処理することでアプリケーション内ストリームとやりとりします。演算子により、1 つまたは複数のデータストリームが新しいデータストリームに変換されます。SQL アプリケーションの場合、SQL ステートメントを利用して SQL テーブルとやりとりする場合と同様にアプリケーション内ストリームとやりとりします。SQL ステートメントを 1 つまたは複数のデータストリームに適用し、結果を新しいデータストリームに挿入します。
 
Q: どのようなアプリケーションコードがサポートされていますか?
Java アプリケーションについては、Kinesis Data Analytics は、 Apache FlinkAWS SDK で構築された Java アプリケーションに対応しています。SQL アプリケーションの場合、Kinesis Data Analytics でサポートされる ANSI SQL には、ストリーミングデータを操作しやすくするために ANSI SQL 標準を拡張した機能があります。

アプリケーションの管理

Q: Kinesis Data Analytics アプリケーションの動作とパフォーマンスをモニタリングするにはどうすればいいですか?
AWS には、Kinesis Data Analytics アプリケーションをモニタリングするために使用できるさまざまなツールが用意されています。自動的にモニタリングが行われるように、これらのツールを設定できます。アプリケーションの監視方法については、次を参照してください。
 
Q: Kinesis Data Analytics アプリケーションへのアクセスを管理、制御する方法を教えてください。
Kinesis Data Analytics では、ユーザーがアプリケーション内で指定したストリーミングデータソース内のレコードに対する読み取り権限が必要になります。また、ユーザーがアプリケーション出力設定に指定した宛先にアプリケーション出力を書き込む権限も必要になります。これらの権限を付与するには、Kinesis Data Analytics が引き受けることのできる IAM ロールを作成します。このロールに付与する権限によって、サービスがこのロールを引き受けたときに Kinesis Data Analytics で実行できる内容が決まります。詳細については、以下のトピックを参照してください。
 
Q: Kinesis Data Analytics ではアプリケーションはどのようにスケールされますか?
Kinesis Data Analytics により、アプリケーションが大半のシナリオにおける複雑なクエリとソースストリームのデータスループットに対応できるように、伸縮自在にスケールされます。Kinesis Data Analytics は、Amazon Kinesis 処理単位 (KPU) 数で表すことができます。1 つの KPU で 1 vCPU と 4GB メモリが与えられます。
 
Java アプリケーションの場合、Kinesis Data Analytics によって、KPU あたり 50GB の稼働アプリケーションストレージが割り当てられます。このストレージはアプリケーションによってチェックポイントに利用されます。また、これは一時ディスク経由で利用できます。チェックポイントは、アプリケーションが中断したとき、即座に回復するために使用される、稼働アプリケーションの最新バックアップです。API の Parallelism パラメータと ParallelismPerKPU パラメータを利用し、Java アプリケーションタスク (ソースから読み込んだり、演算子を実行したりなど) に対する Kinesis Data Analytics の並列実行を制御することもできます。Parallelism によってタスクの同時実行インスタンスの数が定義されます。演算子、ソース、シンクはすべて定義された並列処理で実行されます。デフォルトは 1 です。KPU あたりの Parallelism によって、アプリケーションの Kinesis Processing Unit (KPU) 単位でスケジュールできる並列タスクの数が定義されます。デフォルトは 1 です。詳細については、「Amazon Kinesis Data Analytics for Java Developer Guide」の Scalingをご覧ください。
 
SQL アプリケーションの場合、各ストリーミングソースは対応するアプリケーション内ストリームにマッピングされます。多くのユーザーには必要ありませんが、入力並列処理パラメータを指定して、ソースがマッピングされるアプリケーション内ストリームの数を増やすことにより、KPU 数で表される能力をより効率的に使用することができます。Kinesis Data Analytics では、Amazon Kinesis Data Stream のシャードなど、ストリーミングデータソースのパーティションが、ユーザーが指定したアプリケーション内データストリーム数に対して均等に割り当てられます。たとえば、ストリーミングデータソースとして 10 シャードの Amazon Kinesis Data Stream があり、2 つの入力による並列処理を指定すると、Kinesis Data Analytics により、「SOURCE_SQL_STREAM_001」と「SOURCE_SQL_STREAM_002」という 2 つのアプリケーション内ストリームに対し、5 つの Amazon Kinesis シャードが割り当てられます。詳細については、Amazon Kinesis Data Analytics for SQL Developer Guide の Configuring Application Inputを参照してください。
 
Q: Kinesis Data Analytics アプリケーションの構築や管理に関するベストプラクティスは何ですか?
SQL のベストプラクティスについては、「Amazon Kinesis Data Analytics for SQL Developer Guide」の Best Practicesセクションを参照してください。そこでは、アプリケーションの管理、入力スキーマの定義、出力への接続、アプリケーションコードの作成が説明されています。

料金と請求

Q: Kinesis Data Analytics の費用はどれくらいですか?
Amazon Kinesis Data Analytics の場合、お支払いいただくのは実際に使用した分のみです。Amazon Kinesis Data Analytics では、リソースのプロビジョニングをする必要がなく、初期費用もありません。
 
ストリーミングアプリケーションの実行に使用された KPU (Kinesis Processing Unit) の数に基づいて時間あたりの課金が発生します。KPU とは、1 vCPU のコンピューティングと 4 GB のメモリで構成されるストリーム処理能力の単位です。Amazon Kinesis Data Analytics では、メモリやコンピューティングの要求が処理の複雑性や処理されたストリーミングデータのスループットに合わせて変わるとき、ストリーム処理アプリケーションによって必要とされる KPU の数が自動的に拡大縮小されます。
 
Java アプリケーションの場合、アプリケーションのオーケストレーションに使用された KPU がアプリケーションあたり 1 単位追加される方式で課金されます。Java アプリケーションはまた、稼働アプリケーションストレージと永続的アプリケーションバックアップに対しても課金されます。稼働アプリケーションストレージは Amazon Kinesis Data Analytics のステートフル処理機能のために使用され、GB 単位で毎月課金されます。永続的アプリケーションバックアップは任意です。これはアプリケーションバックアップにポイントインタイムリカバリを与え、GB 単位で毎月課金されます。
 
料金の詳細については、Amazon Kinesis Data Analytics の 料金ページを参照してください。
 
Q: Kinesis Data Analytics は AWS 無料利用枠の対象ですか?
いいえ。現在、Kinesis Data Analytics は AWS 無料利用枠の対象ではありません。AWS 無料利用枠は、AWS サービスのグループの試用を無料で提供するプログラムです。
 
Q: 実行中ではあるが、ソースのデータを処理していない Kinesis Data Analytics アプリケーションは課金されますか?
SQL アプリケーションの場合、Kinesis Data Analytics アプリケーションを実行しているのなら、1 KPU に対する料金が最低料金として請求されます。Java アプリケーションの場合、Kinesis Data Analytics アプリケーションを実行しているのなら、2 KPU と 50GB の稼働アプリケーションストレージに対する料金が最低料金として請求されます。
 
Q: Kinesis Data Analytics のコスト以外に、私が負担する可能性のあるコストはありますか?
Kinesis Data Analytics は、データの読み込み元であるストリーミングソースと、処理したデータの書き込み先から独立した、完全マネージド型ストリーミング処理ソリューションです。アプリケーションとの間で読み書きするサービスとは別に請求されます。

Java アプリケーションの構築

Java アプリケーション用のアプリケーションコードを作成する

Q: Apache Flink とは何ですか?
Apache Flink はストリームと一括データ処理のためのオープンソースのフレームワーク/エンジンです。用途の広い演算子を提供し、重複処理など、ストリーミングの中心的問題を効率的に解決するため、ストリーミングアプリケーションを簡単に構築できます。Apache Flink は、データストリーム全体の分散計算に対してデータ分配、通信、耐障害性を与えます。
 
Q: アプリケーションの開発方法は?
まず、AWS SDK、Apache Flink、AWS のサービス向けコネクタが含まれるオープンソースライブラリをダウンロードすることから始めます。ライブラリのダウンロード方法と初めてのアプリケーションを作成する方法は、 Amazon Kinesis Data Analytics for Java Developer Guideにあります。
 
Q: アプリケーションコードの概要を教えてください。
データストリームとストリーム演算子を利用し、Java コードを記述します。アプリケーションデータストリームは、Java コードを利用した処理の実行対象となるデータ構造です。データはソースからアプリケーションデータストリームに継続的に流れます。変換、分割、集計、結合、ウィンドウなどの処理をアプリケーションデータストリームで定義するために 1 つまたは複数のストリーム演算子が使用されます。データストリームと演算子はシリアルチェーンとパラレルチェーンでまとめることができます。擬似コードを利用した簡単な例を以下に示します。
DataStream <GameEvent> rawEvents = env.addSource(
	New KinesisStreamSource(“input_events”));
DataStream <UserPerLevel> gameStream =
	rawEvents.map(event - > new UserPerLevel(event.gameMetadata.gameId, 
			event.gameMetadata.levelId,event.userId));
gameStream.keyBy(event -> event.gameId)
            .keyBy(1)
            .window(TumblingProcessingTimeWindows.of(Time.minutes(1)))
            .apply(...) - > {...};
gameStream.addSink(new KinesisStreamSink("myGameStateStream"));
Q: 演算子はどのように使用すればよいのですか?
演算子は入力としてアプリケーションデータストリームを受け取り、処理したデータをアプリケーションデータストリームに出力として送信します。演算子をまとめて複数の手順を持つアプリケーションを構築できます。実装や運用に分散システムの高度な知識は必要ありません。
 
Q: どのような演算子がサポートされていますか?
Kinesis Data Analytics for Java には、Apache Flink の 25 以上の演算子が含まれています。Map、KeyBy、Aggregations、Window Join、Window など、幅広いユースケースを解決できます。Map では、任意の処理を実行できます。入ってきたデータストリームから 1 つの要素を受け取り、別の要素を生み出します。KeyBy では、指定したキーを利用してデータが論理的に整理されます。同様のデータポイントをまとめて処理できます。Aggregations では、sum、min、max など、複数のキーをまたいで処理が実行されます。Window Join では、所与のキーとウィンドウで 2 つのデータストリームが結合されます。Window では、キーを利用して日付がグループ化されます。5 分の期間で一意の項目を数えるなど、一般的には時間ベースの操作となります。
 
これらの演算子で要件が満たされない場合、カスタム演算子を構築できます。他の例は「Amazon Kinesis Data Analytics for Java Developer Guide」の「Operators」セクションにあります。Apache Flink 演算子の完全一覧は Apache Flink ドキュメントの Operatorsセクションにあります。
 
Q: Kinesis Data Analytics Java アプリケーションではどのような統合がサポートされていますか?
統合は最小限のコードで設定できます。Apache Flink をベースとするオープンソースライブラリでは、処理データを配信するためのストリーミングの配信元、配信先、シンクがサポートされます。これには、非同期入力/出力コネクタ経由のデータ強化サポートも含まれています。オープンソースライブラリに含まれる AWS 固有コネクタの一覧を以下に示します。
  • ストリーミングデータの配信元: Amazon Kinesis Data Streams
  • 配信先またはシンク: Amazon Kinesis Data Streams、Amazon Kinesis Data Firehose、Amazon DynamoDB、Amazon S3 (ファイルシンク統合経由で)。
 
Apache Flink には、Apache Kafka、Apache Casssandra、Elasticsearch など、他の コネクタも含まれています。
 
Q: カスタム統合はサポートされていますか?
ファイル、ディレクトリ、ソケット、あるいはインターネット経由でアクセスできるあらゆるものとの読み書きを可能にする一連のプリミティブの上に構築することで、アプリケーションに配信元と配信先を追加できます。Apache Flink からは、 データソースデータシンク用にこのようなプリミティブが提供されます。プリミティブには、データを継続的、1 回限り、非同期、同期などの方法で読み書きする機能などの設定が付属します。たとえば、既存のファイルベースのソース統合を延長することで、Amazon S3 から継続的に読み込むアプリケーションを設定できます。
 
Q: Java アプリケーション向け Kinesis Data Analytics ではどのような配信モデルが提供されていますか?
Kinesis Data Analytics の Java アプリケーションでは、ソースとシンクなど、べき等演算子を使用してアプリケーションが構築されている場合、「厳密に 1 回」の配信モデルが使用されます。つまり、処理されたデータは下流の結果に 1 回だけ影響を与えます。チェックポイントではアプリケーションの現在の状態が保存されます。Java アプリケーション向け Kinesis Data Analytics では、アプリケーションの位置を回復できるため、障害なし実行と同じ意味になります。Java アプリケーションのチェックポイントは Apache Flink の チェックポイント機能から提供されます。デフォルトでは、Java アプリケーション向け Kinesis Data Analytics では Apache Flink の「厳密に 1 回」のセマンティックスが使用されます。Apache Flink の「厳密に 1 回」のセマンティックスを活用するソース、演算子、シンクでアプリケーションを設計する場合、そのアプリケーションでは「厳密に 1 回」の処理セマンティックスがサポートされます。
 
Q: アプリケーションストレージからローカルストレージにアクセスできますか?
はい。Java アプリケーション向け Kinesis Data Analytics からは、Kinesis Processing Unit (KPU) あたり 50 GB の稼働アプリケーションストレージがアプリケーションに与えられます。Kinesis Data Analytics では、アプリケーションに合わせてストレージが拡大縮小されます。稼働アプリケーションストレージは、チェックポイントを利用したアプリケーション状態の保存に利用されます。データをキャッシュするかその他の目的で一時ディスクとして使用するためにアプリケーションコードからも利用できます。Kinesis Data Analytics では、チェックポイント (演算子、リソース、シンクなど) 経由で保存されない稼働アプリケーションストレージからいつでもデータを削除できます。稼働アプリケーションストレージに保存されているデータは暗号化されます。
 
Q: Java 向け Kinesis Data Analytics でアプリケーションを自動バックアップする方法は?
Kinesis Data Analytics では、チェックポイントとスナップショットを利用し、稼働アプリケーションの状態が自動的にバックアップされます。チェックポイントではアプリケーションの現在の状態が保存されます。Java アプリケーション向け Kinesis Data Analytics では、アプリケーションの位置を回復できるため、障害なし実行と同じ意味になります。チェックポイントでは、稼働アプリケーションストレージが活用されます。スナップショットによって、アプリケーションのポイントインタイムリカバリが保存されます。スナップショットでは、永続的アプリケーションバックアップが活用されます。
 
Q: アプリケーションスナップショットとは何ですか?
スナップショットを利用すると、アプリケーションを前のポイントインタイムに作成/復元できます。それにより、アプリケーションの前の状態を維持したり、アプリケーションをいつでもロールバックしたりできます。スナップショットはゼロから数千の単位で管理します。スナップショットでは永続的アプリケーションバックアップが使用されます。Kinesis Data Analytics では、サイズに基づいて請求されます。Kinesis Data Analytics はデフォルトで、スナップショットに保存されているデータを暗号化します。API から個々のスナップショットを削除したり、アプリケーションを削除することですべてのスナップショットを削除したりできます。
 
Q: どのバージョンの Apache Flink がサポートされるのですか?
Java アプリケーション向け Amazon Kinesis Data Analytics では、Apache Flink 1.6 と Java バージョン 8 がサポートされています。

SQL アプリケーションの構築

SQL アプリケーションの入力の構築

Q: Kinesis Data Analytics SQL アプリケーションではどのような入力がサポートされていますか?
Kinesis Data Analytics の SQL アプリケーションでは、ストリーミングデータソースとリファレンスデータソースという 2 種類の入力がサポートされています。ストリーミングデータソースは絶えず生成されるデータであり、アプリケーションに読み込まれて処理されます。リファレンスデータソースは静的データであり、アプリケーションで使用してストリーミングソースから配信されるデータを拡充します。各アプリケーションには、ただ 1 つのストリーミングデータソースと、ただ 1 つのリファレンスデータソースを設定できます。アプリケーションでは、Amazon Kinesis Data Streams や Amazon Kinesis Data Firehose などのストリーミングデータソースから新しいデータを絶えず読み込み、処理します。アプリケーションでは、Amazon S3 などのリファレンスデータソース全体を読み込み、使用して、SQL の JOIN によってストリーミングデータソースを拡充します。
 
Q: リファレンスデータソースとは何ですか?
リファレンスデータソースは静的データであり、アプリケーションで使用してストリーミングソースから配信されるデータを拡充します。リファレンスデータは S3 バケット内にオブジェクトとして保存されます。SQL アプリケーションを開始すると、Kinesis Data Analytics では S3 オブジェクトが読み込まれ、リファレンスデータを保存するアプリケーション内 SQL テーブルが作成されます。アプリケーションコードでは、この後に、このテーブルをアプリケーション内ストリームと結合することができます。SQL テーブル内のデータを更新するには、 UpdateApplication API を呼び出します。
 
Q: SQL アプリケーションではストリーミングデータソースをどのように設定しますか?
ストリーミングデータソースには、Amazon Kinesis Data Stream または Amazon Kinesis Data Firehose 配信ストリームを指定できます。ストリーミングデータソースの新しいデータは、リアルタイムで配信されるたびに Kinesis Data Analytics SQL アプリケーションに読み込まれます。データにアクセスするには、SQL コード内でアプリケーション内ストリームを使用します。アプリケーション内ストリームは、SQL テーブルと同様に、作成、そこへの挿入、およびそこからのデータ選択が可能です。SQL テーブルとの相違点は、アプリケーション内ストリームはストリーミングデータソースからの新しいデータで絶えず更新されるということです。
 
ストリーミングデータソースを追加するには、 AWS マネジメントコンソールを使用します。ソースの詳細については、「Kinesis Data Analytics for SQL Developer Guide」の Configuring Application Inputのセクションを参照してください。
 
Q: SQL アプリケーションではリファレンスデータソースをどのように設定しますか?
リファレンスデータソースには Amazon S3 オブジェクトを指定できます。Kinesis Data Analytics SQL アプリケーションの実行を開始すると、S3 オブジェクト全体が読み込まれます。データにアクセスするには、SQL コード内でテーブルを使用します。リファレンスデータソースを使用する最も一般的なユースケースは、SQL の JOIN を使用してストリーミングソースから配信されるデータを拡充することです。
 
リファレンスデータソースを追加するには、AWS CLI で S3 バケット、オブジェクト、IAM ロール、および関連するスキーマを指定します。このデータは、アプリケーションの開始時に Kinesis Data Analytics によりロードされ、ユーザーがなんらかの更新 API コールを行うたびに再ロードされます。
 
Q: SQL アプリケーションでは、どのようなデータ形式がサポートされていますか?
Kinesis Data Analytics の SQL アプリケーションでは、スキーマを検出し、UTF-8 でエンコードされた JSON レコードと CSV レコードを DiscoverInputSchema API を使用して自動解析できます。このスキーマは、アプリケーション内ストリームへの挿入操作の一環として、ストリームから読み込まれたデータに適用されます。
 
その他の、UTF-8 にエンコードされた、区切り文字を使用しないデータの場合、区切り文字を使用する CSV 以外のデータの場合、または discovery API でスキーマが完全には検出されなかった場合は、対話型のスキーマエディタを使用してスキーマを定義するか、または文字列操作関数を使用してデータを構造化することができます。詳細については、「Amazon Kinesis Data Analytics for SQL Developer Guide」の Using the Schema Discovery Feature and Related Editingを参照してください。
 
Q: 入力ストリームはどのように SQL コードで使用されますか?
SQL 向け Kinesis Data Analytics により、指定したスキーマが適用されるとともに、ストリーミングソースの場合にはデータが 1 つまたは複数のアプリケーション内ストリームに挿入され、ストリーミングリファレンスソースの場合にはデータが単一の SQL テーブルに挿入されます。アプリケーション内ストリーム数のデフォルト値により、ユースケースの大半のニーズが満たされます。アプリケーションが CloudWatch のメトリクス、MillisBehindLatest によって定義されたソースストリーム内の最新データを処理する際に遅延していることが判明した場合は、このデフォルト値を大きくする必要があります。必要なアプリケーション内ストリーム数は、ソースストリームのスループット量とクエリの複雑さの両方の影響を受けます。ソースストリームにマッピングされるアプリケーション内ストリーム数を指定するパラメータには、入力並列処理という名前が付いています。

SQL アプリケーション用のアプリケーションコードを作成する

Q: SQL アプリケーションコードの概要を教えてください。
アプリケーションコードは、入力の処理と出力の生成を行う一連の SQL ステートメントです。これらの SQL ステートメントは、アプリケーション内ストリームとリファレンステーブルに作用します。アプリケーション内ストリームは、SELECT や INSERT の SQL 操作の実行対象にできる、絶えず更新されるテーブルに似ています。設定したソースおよび出力先は、アプリケーション内ストリームを介して SQL コードで使用されます。また、クエリの中間結果を格納する追加のアプリケーション内ストリームを作成することもできます。
 
アプリケーション内ストリームを操作するには、次のパターンを使用します。
  • INSERT ステートメントのコンテキストでは必ず SELECT ステートメントを使用してください。行を選択した場合の結果は、別のアプリケーション内ストリームに挿入します。
  • ポンプのコンテキストでは INSERT ステートメントを使用してください。ポンプは、INSERT ステートメントを絶えず実行されるようにしてアプリケーション内ストリームへの書き込みを行うために使用できます。
  • ポンプは、複数のアプリケーション内ストリームを結合し、1 つのアプリケーション内ストリームからデータを選択して、その結果を別のアプリケーション内ストリームに挿入するために使用できます。
 
次の SQL コードは、シンプルですが実用的なアプリケーションです。
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
    ticker_symbol VARCHAR(4),
    change DOUBLE,
    price DOUBLE);

CREATE OR REPLACE PUMP "STREAM_PUMP" AS 
  INSERT INTO "DESTINATION_SQL_STREAM"    
    SELECT STREAM ticker_symbol, change, price    
    FROM "SOURCE_SQL_STREAM_001";
アプリケーションコードの詳細については、「Amazon Kinesis Data Analytics for SQL Developer Guide」の Application Codeを参照してください。
 
Q: Kinesis Data Analytics には SQL コード作成用のサポートはありますか?
Kinesis Data Analytics には、ストリーミングフィルター、回転時間枠、異常検出などの一般的なユースケース用の分析テンプレートから成るライブラリがあります。これらのテンプレートには、 AWS マネジメントコンソール内の SQL エディタからアクセスできます。アプリケーションを作成して SQL エディタに移動すると、コンソールの左上隅にテンプレートが表示されます。
 
Q: Kinesis Data Analytics でリアルタイムの異常検出を実行するにはどうすればいいですか?
Kinesis Data Analytics には、異常検出用など、いくつかの高度な分析用に事前作成された SQL 関数があります。お客様の SQL コードからこの関数を呼び出すだけで、リアルタイムで異常を検出できます。Kinesis Data Analytics では、Random Cut Forest アルゴリズムを使って異常検出を実行します。Random Cut Forest の詳細については、 ストリーミングデータの例外検知に関するホワイトペーパーをご覧ください。

SQL アプリケーションで出力先を構成する

Q: どのような出力先がサポートされていますか?
SQL 向け Kinesis Data Analytics では、アプリケーションごとに出力先が 4 つまでサポートされています。SQL の結果は Amazon S3、Amazon Redshift、Amazon Elasticsearch Service (Amazon Kinesis Data Firehose 経由)、Amazon Kinesis Data Streams に保存できます。Kinesis Data Analytics で直接サポートされていない出力先に書き込むには、SQL 結果を Amazon Kinesis Data Streams に送信し、Amazon Kinesis Data Streams と AWS Lambda との統合を利用して、選択した出力先に送信します。
 
Q: 出力先はどのように設定しますか?
アプリケーションコード内で、SQL ステートメントの出力を 1 つまたは複数のアプリケーション内ストリームに書き込みます。オプションで、特定のアプリケーション内ストリームへのすべての書き込みを最大 4 つの外部出力先に保管する出力設定をアプリケーションに追加できます。これらの外部出力先としては Amazon S3 バケット、Amazon Redshift テーブル、Amazon Elasticsearch Service ドメイン (Amazon Kinesis Data Firehose 経由)、Amazon Kinesis Data Stream を指定できます。アプリケーションごとに 4 つの出力先がサポートされます。4 つの出力先の組み合わせは任意で指定できます。詳細については、 Configuring Output Streamsを参照してください。これは「Amazon Kinesis Data Analytics for SQL Developer Guide」の中にあります。
 
Q: 必要な出力先が直接サポートされていません。この出力先に SQL の結果を送信するにはどうすればよいですか?
直接サポートされていない出力先に書き込むには、AWS Lambda を使用します。結果を Amazon Kinesis Data Stream に書き込んでから、AWS Lambda を使用して処理された結果を読み込み、選択した出力先に送信することをお勧めします。詳細については、「 Example: AWS Lambda Integration」を参照してください。これは「Amazon Kinesis Data Analytics for SQL Developer Guide」の中にあります。または、Kinesis Data Firehose 配信ストリームを使用してデータを Amazon S3 にロードし、そのデータを読み込んで選択した出力先に送信する AWS Lambda 関数をトリガーします。詳細については、「AWS Lambda Developer Guide」の Using AWS Lambda with Amazon S3を参照してください。
 
Q: Kinesis Data Analytics ではどのような配信モデルが提供されていますか?
Kinesis Data Analytics の SQL アプリケーションでは、設定した出力先にアプリケーション出力を「少なくとも 1 回」配信する配信モデルが使用されています。Kinesis Data Analytics アプリケーションでは内部チェックポイントを使用します。これらのチェックポイントの時点では、出力レコードがデータ消失なしに出力先に配信されています。このサービスでは、チェックポイントを必要に応じて使用し、アプリケーション出力が設定された出力先に少なくとも 1 回配信されるようにします。配信モデルの詳細については、「Amazon Kinesis Data Analytics for SQL Developer Guide」の Configuring Application Outputを参照してください。

他のストリーム処理ソリューションとの比較

Q: Amazon Kinesis Data Analytics は Amazon Kinesis クライアントライブラリを使用するユーザー自身のアプリケーションの実行とはどのように異なりますか?
Amazon Kinesis クライアントライブラリ (KCL) とはビルド済みのライブラリであり、Amazon Kinesis Data Stream からデータを読み込んで処理するコンシューマアプリケーションの作成を支援するものです。KCL は、データストリームボリュームの変化への適応、ストリーミングデータの負荷分散、分散サービスの調整、データ処理の耐障害性などの複雑な問題に対応します。KCL を利用することにより、アプリケーションの構築中にビジネスロジックに集中できます。
 
Kinesis Data Analytics を使用すると、ストリーミングデータをリアルタイムで処理およびクエリできます。標準的な SQL を使用するだけでデータストリームを処理できるため、新しいプログラミング言語を学習する必要はありません。Kinesis Data Analytics に受信データストリームを取り込み、SQL クエリを作成して、結果のロード先を指定します。Kinesis Data Analytics では、KCL を使用して、基盤となるアプリケーションの操作の一部としてストリーミングデータソース内のデータが読み込まれます。このサービスにより、データとともに、チェックポイントなど KCL の使い方に関連する多数の複雑な概念が抽出されます。
 
完全マネージド型のソリューションが必要であり、SQL を使ってデータストリーム内のデータを処理したい場合は、Kinesis Data Analytics を使用してください。要件が Kinesis Data Analytics では満たせないため、カスタム処理ソリューションを構築する必要がある場合は、KCL を使用してください。構築したコンシューマアプリケーションを管理できるようになります。

Amazon Kinesis Data Analytics の使用を開始する

Product-Page_Standard-Icons_01_Product-Features_SqInk
コストを計算する

料金ページを見る

詳細 
Product-Page_Standard-Icons_01_Product-Features_SqInk
入門ガイドを見る

このステップバイステップガイドで Amazon Kinesis Data Analytics の使用方法を学習できます。

Product-Page_Standard-Icons_03_Start-Building_SqInk
ストリーミングアプリケーションの構築を開始する

Amazon Kinesis Data Analytics コンソールからストリーミングアプリケーションを構築する。