aws black belt tech シリーズ 2015 - amazon kinesis

96
Amazon Kinesis AWS Black Belt Tech Webinar 2015 パートナーソリューションアーキテクト 榎並 利晃

Upload: amazon-web-services-japan

Post on 16-Apr-2017

8.596 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon Kinesis

AWS Black Belt Tech Webinar 2015

パートナーソリューションアーキテクト 榎並 利晃

Page 2: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Agenda

• Kinesis概要

• データの入力

• データの取得と処理

• Kinesisの運用

• まとめ

• 補足資料: 事例紹介

2

Page 3: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Agenda

• Kinesis概要

• データの入力

• データの取得と処理

• Kinesisの運用

• まとめ

• 補足資料: 事例紹介

3

Page 4: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon Kinesis概要

4

Page 5: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon Kinesisとは?

• ハイボリュームな連続したデータをリアルタイムで集計・変換などの処理を可能にするフルマネージドサービス

• Kinesisは、数十万のデータソースからの1時間辺り数テラバイトのデータを処理することができ、かつ、格納されたデータは、複数のAZに格納する信頼性と耐久性をもつサービス

5

Page 6: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

AWS のビッグデータ・プラットフォーム

S3 Kinesis DynamoDB

AWS Lambda

KCL Apps EMR

EMR Redshift

Machine Learning

Collect Process Analyze

Store

Data Collection and Storage

Data

Processing

Event Processing

Data Analysis

6

Page 7: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データのタイプ

ファイル: media, log files (sets of records)

ストリーム: records (eg: device stats)

トランザクション: DBへのRead/Write

7

Page 8: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データのタイプ と AWSサービス

S3

Kinesis

DynamoDB

8

Page 9: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis概要

データ入力側 データ処理側

HTTP Post

AWS SDK

LOG4J

Flume

Fluentd

Get* APIs

Kinesis Client Library + Connector Library

Apache Storm

Amazon Elastic MapReduce

AWS Mobile SDK

Apache Spark Streaming

9

Kinesis Producer Library

Page 10: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis構成内容

Data Sources

App.4

[Machine Learning]

App.1

[Aggregate & De-Duplicate]

Data Sources

Data Sources

Data Sources

App.2

[Metric Extraction]

S3

DynamoDB

Redshift

App.3

[Real-time Dashboard]

Data Sources

Availability Zone

Shard 1

Shard 2

Shard N

Availability Zone

Availability Zone

Kinesis

AW

S E

nd

poin

t

• 用途単位でStreamを作成し、Streamは、1つ以上のShardで構成される

• Shardは、データ入力側 1MB/sec, 1000 TPS、データ処理側 2 MB/sec, 5TPSのキャパシティを持つ

• 入力するデータをData Recordと呼び、入力されたData Recordは、24 時間かつ複数のAZに保管される

• Shardの増加減によってスケールの制御が可能

Stream

10

Page 11: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

セットアップとモニタリング

• Management Console/APIで簡単セットアップ

Stream名とShard数を入力してStreamが作成できる。

キャパシティ、レイテンシーをモニタリング。 Cloud Watchで監視も可能

11

Page 12: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesisコスト 従量課金 & 初期費用不要

課金項目 単価

シャード利用料 $0.0195/shard/時間

PUT Payload Unit トランザクション

$0.0215/100万Put

• PUT Payload Unitは、25KB

• シャード1つで、一ヶ月約$14

• Getトランザクションは無料

• インバウンドのデータ転送料は無料

• アプリケーションが走るEC2は通常の料金がかかります

アップデートあり

(※)東京リージョンの費用(2015年8月時点)

12

Page 13: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ入力

13

Page 14: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ入力方法 • PutRecord API, PutRecords API でデータ入力が可能

– http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html

– http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html

• AWS SDK for Java, Javascript, Python, Ruby, PHP, .Net, AWS CLIが利用可能

• PutRecords APIを用いることにより効率的なアップロードが可能(上限1000Records, 1MB)

$ aws kinesis put-record \ --stream-name StreamName --data 'foo' --partition-key $RANDOM

{ "ShardId": "shardId-000000000013", "SequenceNumber": "49541296383533603670305612607160966548683674396982771921" }

レスポンス

AWS CLI を利用した例(PutRecord):

14

Page 15: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ入力方法

$ aws kinesis put-records \ --stream-name StreamName --records Data=foo, PartitionKey=part1 Data=bar,PartitionKey=part2

{ "FailedRecordCount": 0, "Records": [ { "ShardId": "shardId-000000000000", "SequenceNumber": "49545693054015017535413974379008689042941246688683098114" }, { "ShardId": "shardId-000000000000", "SequenceNumber": "49545693054015017535413974379009897968760861317857804290" } ] }

レスポンス

AWS CLI を利用した例(PutRecords):

15

Page 16: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ入力イメージ

Stream

Shard-0

Shard-1

Data Record

Data Record

Data Record

Data Recordに設定されたパーティションキーを基にShardに分配

DataRecordの中身

データブロブ (Max 1M)

パーティションキー (Max 256B)

2015/06/03 Recordサイズが50kから1Mに拡張

アップデートあり

16

Page 17: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ入力及び分配イメージ

• DataRecordに設定されたパーティションキーを基にShardに分配 • Shardは担当するレンジを持ち、パーティションキーをMD5でハッシュ化

した値によって該当のShardに分配される

0

2128

Shard-1

MD5(パーティションキー)

Shard-0

データ パーティション

キー

値によりどちらかに分配

0

2127

17

Page 18: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

パーティションキーについてのTips

• バッファとしてKinesisを利用する場合

– パーティションキーの数 > shardの数

– カーディナリティーの高いパーティションキーを使う

18

• Streaming Map ReduceとしてKinesisを利用する場合

– パーティションキーに意味を持たせてShardを振り分ける

Data

Shard-0

Shard-1

Data Data Data

均等に振り分け

共通処理

共通処理

Data

Shard-0

Shard-1

Data Data Data

意味に応じて振り分け

処理A

処理B

Page 19: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

shard

シーケンス番号

• KinesisがStream内でユニークなシーケンス番号を付与 • データもシーケンス番号も不変 • シーケンス番号でデータが何回でも取得できる(24時間以内) • 何度取得してもシーケンス番号の順番はかわらない

SeqNo (14)

SeqNo (17)

SeqNo (25)

SeqNo (26)

SeqNo (32)

19

Page 20: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

その他Tips • ExplicitHashKeyの使い方

– Partition Keyを使わずExplicitHashKeyを使って明示的にShardの振り分けができる

20

• SequenceNumberForOrderingの使い方 – SequenceNumberForOrdering パラメーターを使用すると、同じクライアントが PutRecord を呼

び出したときに、パーティションキーが同じであっても、シーケンス番号は厳密に大きくなるようになります。SequenceNumberForOrdering を使用しても、複数の同時実行のアプリケーションから追加されたレコード間、または複数のパーティションキー間では、順序が正しくなるとは限りません。

[ CLIの例] % aws kinesis put-record --stream STREAM --data "shardId-000000000000" --partition-key test { "ShardId": "shardId-000000000000", "SequenceNumber": "49553779153805478375276164659904167464197973775715663986" } % aws kinesis put-record --stream STREAM --data "shardId-000000000007" --partition-key test --explicit-hash-key 170141183460469231731687303715884105728 { "ShardId": "shardId-000000000001", "SequenceNumber": "49553779153827779120474695283200445687381298107557871746" }

Partition keyだけを指定した場合は、Kinesisが自動的にハッシュ値を使ってShardに振り分け

明示的に別なShardのハッシュ値を指定していするとその値を優先して振り分ける

Page 21: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

その他Tips • PutRecords API

– レコード数は、500レコードまで格納してコールすることが可能

– 但し、Shardの上限(put 1000 レコード/秒/shard)に注意

– レスポンスにそれぞれのレコードに対する結果が返ってくるため、正常終了されているかをループ処理などで確認すること

{ "FailedRecordCount”: 1, "Records": [ { "SequenceNumber": "21269319989900637946712965403778482371", "ShardId": "shardId-000000000001" }, { “ErrorCode":”ProvisionedThroughputExceededException”, “ErrorMessage": "Rate exceeded for shard shardId-000000000001 in stream exampleStreamName under account 111111111111." }, { "SequenceNumber": "21269319989999637946712965403778482985", "ShardId": "shardId-000000000002" } ] }

例)PutRecords Response

21

Page 22: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ入力 エコシステム

22

Page 23: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

主なツール一覧

• Amazon Kinesis Producer Lib

• Fluentd for Amazon Kinesis

• MQTT-Kinesis Bridge

その他にもツールがありますので以下をご確認ください。 https://aws.amazon.com/kinesis/developer-resources/

23

Page 24: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Producer Library: KPL • Kinesisにデータを送信する補助ライブラリ

• KPL は、C++ で書かれており、メインプロセスの子プロセスとして実行されます。

[ドキュメント]

http://docs.aws.amazon.com/ja_jp/kinesis/latest/dev/developing-producers-with-kpl.html

https://blogs.aws.amazon.com/bigdata/post/Tx3ET30EGDKUUI2/Implementing-Efficient-and-Reliable-Producers-with-the-Amazon-Kinesis-Producer-L

<特徴>

1. 1つのレコードにユーザデータを集約

2. レコードを束ねてputRecordsの形に自動変換

3. 非同期実行

<サポートプラットフォーム> • カーネルバージョン 2.6.18(2006 年 9 月)の

Linux ディストリビューション • Apple OS X 10.9 以降 • Windows Server 2008 以降

KPL は、64 ビット版のみ

24

KPLの集約機能を利用するためにはあとで説明するKCLのバージョンを1.4以上にする必要があります。 使用するバージョンなどは以下のサイトご覧ください。 http://docs.aws.amazon.com/ja_jp/kinesis/latest/dev/kinesis-kpl-integration.html

Page 25: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Fluent Plugin for Amazon Kinesis

• Kinesisへデータを投入してくれるfluentdのoutputプラグイン

• https://github.com/awslabs/aws-fluent-plugin-kinesis

• Fluentdをログ収集に使っている環境下なら、このプラグインを追加するだけでKinesisへのデータ投入ができる!

$ gem install fluent-plugin-kinesis $ vi fluentd.conf <match YOUR.TAG> type kinesis stream_name YOUR_STREAM_NAME region ap-northeast-1 flush_interval 1 random_partition_key </match> $ fluentd –c fluentd.conf

25

Page 26: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

MQTT Broker Kinesis-MQTT Bridge

MQTT-Kinesis Bridge

• センサーデバイスなどライトウェイトなプロトコル(MQTT)を利用し、データをアップロードする場合に利用

• EC2上に本MQTT Bridgeをデプロイして利用。 • GithubからMQTT-Kinesis Bridgeサンプルソースが取得可能

https://github.com/awslabs/mqtt-kinesis-bridge

MQTT Broker Kinesis-MQTT Bridge

センサー

センサー

センサー

Auto scaling Group

26

Page 27: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データの取得と処理

27

Page 28: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ取得方法 • GetShardIterator APIでShard内のポジションを取得し、GetRecords APIでデータ入力が可能

– http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html

– http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html

• AWS SDK for Java, Javascript, Python, Ruby, PHP, .Net が利用可能

• AWS CLIが利用可能

$ aws kinesis get-shard-iterator --stream-name StreamName \ --shard-id shardId-000000000013 --shard-iterator-type AT_SEQUENCE_NUMBER \ --starting-sequence-number 49541296383533603670305612607160966548683674396982771921 { "ShardIterator": ”FakeIterator" } $ aws kinesis get-records --shard-iterator FakeIterator --limit 1 { "Records": [ { "PartitionKey": "16772", "Data": "Zm9v", "SequenceNumber": "49541296383533603670305612607160966548683674396982771921" } ], "NextShardIterator": “YetAnotherFakeIterator" }

get-shard-iterator

get-records

28

Page 29: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

GetShardIteratorでのデータ取得指定方法

• GetShardIterator APIでは、ShardIteratorTypeを指定してポジションを取得する。

• ShardIteratorTypeは以下の通り – AT_SEQUENCE_NUMBER ( 指定のシーケンス番号からデータ取得 )

– AFTER_SEQUENCE_NUMBER ( 指定のシーケンス番号以降からデータ取得 )

– TRIM_HORIZON ( Shardにある最も古いデータからデータ取得 )

– LATEST ( 最新のデータからデータ取得 )

Seq: xxx

LATEST

AT_SEQUENCE_NUMBER AFTER_SEQUENCE_NUMBER

TRIM_HORIZON

GetShardIteratorの動作イメージ

29

Page 30: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Client Library (KCL) Client library for fault-tolerant, at least-once, Continuous Processing

• Shardと同じ数のWorker

• Workerを均等にロードバランシング

• 障害感知と新しいWorkerの立ち上げ

• シャードの数に応じてworkerが動作する

• AutoScalingでエラスティック

• チェックポインティングとAt least once処理

これらの煩雑な処理を意識することなく ビジネスロジックに集中することができる。

30

Page 31: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Sample RecordProcessor public class SampleRecordProcessor implements IRecordProcessor { @Override public void initialize(String shardId) { LOG.info("Initializing record processor for shard: " + shardId); // initialize to start processing records. initializeLocalState(shardId); } @Override public void processRecords(List<Record> records, IRecordProcessorCheckpointer checkpointer) { LOG.info("Processing " + records.size() + " records for kinesisShardId " + kinesisShardId); // Process records and perform all exception handling. processRecordsWithRetries(records); // Checkpoint once every checkpoint interval. if (System.currentTimeMillis() > nextCheckpointTimeInMillis) { checkpoint(checkpointer); nextCheckpointTimeInMillis = System.currentTimeMillis() + CHECKPOINT_INTERVAL_MILLIS; } } }

31

Page 32: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Client Libraryの動き

Stream

Shard-0

Shard-1

Kinesis アプリケーション

(KCL)

ワーカー シーケンス番号

Instance A 12345

Instance A 98765

Data Record (12345)

Data Record (24680)

Data Record (98765)

DynamoDB

Instance A

1. Kinesis Client LibraryがShardからData Recordを取得 2. 設定された間隔でシーケンス番号をそのワーカーのIDをキーにした

DynamoDBのテーブルに格納 3. 1つのアプリが複数Shardからデータを取得し処理を実行

(*)実際のKey, Attribute名は異なります。

32

Page 33: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Client Libraryの動き Stream

Shard-0

Shard-1

Kinesis アプリケーション

(KCL) ワーカー シーケンス番号

Instance A 12345

Instance B 98765

Data Record (12345)

Data Record (24680)

Data Record (98765)

DynamoDB

Instance A

Kinesis アプリケーション

(KCL)

Instance B

同一アプリを複数インスタンスで実行した場合は、負荷分散される

(*)実際のKey, Attribute名は異なります。

33

Page 34: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Client Libraryの動き Stream

Shard-0

Shard-1

Kinesis アプリケーション

(KCL) ワーカー シーケンス番号

Instance A ↓ Instance B

12345

Instance B 98765

Data Record (12345)

Data Record (24680)

Data Record (98765)

DynamoDB

Instance A

Kinesis アプリケーション

(KCL)

Instance B

Instance Aがデータ取得されない状況を検知し、Instance Bが、DynamoDBに格納されているシーケンス番号からデータ取得を行う

(*)実際のKey, Attribute名は異なります。

34

Page 35: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Client Libraryの動き–拡張性 Stream

Shard-0

Kinesis アプリケーション

(KCL)

Shard ワーカー シーケンス 番号

Shard-0 Instance A 12345

Shard-1 Instance A 98765

Data Record (12345)

Data Record (24680)

DynamoDB

Instance A

Shard-1を増やしたことを検知し、データ取得を開始し、Shard-1のチェックポイント情報をDynamoDBに追加

Shard-1

Data Record (98765)

New

(*)実際のKey, Attribute名は異なります。

35

Page 36: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

目的に応じてKinesisアプリケーションを追加可能

ストリーム

シャード

シャード

データ レコード (12345)

データ レコード (98765)

データ レコード (24680)

データ レコード (12345)

データ レコード (98765)

データ レコード (24680)

アーカイブアプリ (KCL)

DynamoDB Instance A

Shard ワーカー シーケンス 番号

Shard-0 Instance A 12345

Shard-1 Instance A 98765

集計アプリ (KCL)

Instance A Shard ワーカー シーケンス

番号

Shard-0 Instance A 24680

Shard-1 Instance A 98765

各アプリ毎に別テーブルで管理される

Archive Table

Calc Table

36

Page 37: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Client Library (KCL)対応言語

• Java

• Node.js

• .Net

• Python

複数の言語でビジネスロジックを記述し、KCLのMultiLangDaemonがKinesisとのやりとりを行う。

37

Page 38: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

MultiLangDaemonについて • KCL for Python/Node.js/.Netは、KCL for Javaの“MultiLangDaemon”

を常駐プロセスとして利用し、データ処理のメインロジックを各種言語で記述できるライブラリ

• データ処理は、サブプロセスとして起動される

• “MultiLangDaemon”とサブプロセス間のデータ通信は、定義されたプロトコルでSTDIN/STDOUTを使って行われる

KCL(Java)

Shard-0

Shard-1 Worker Thread

Worker Thread Python Logic

Process

Python Logic Process

【Pythonの例】

38

Page 39: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Pythonの例)KCL for Python実装

#!env python from amazon_kclpy import kcl import json, base64 class RecordProcessor(kcl.RecordProcessorBase): def initialize(self, shard_id): pass def process_records(self, records, checkpointer): pass def shutdown(self, checkpointer, reason): pass if __name__ == "__main__": kclprocess = kcl.KCLProcess(RecordProcessor()) kclprocess.run()

39

Page 40: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

【参考情報】Multi Language Protocol

Action Parameter

Initialize "shardId" : "string"

processRecords [{ "data" : ”base64encoded_string", "partitionKey" : ”partition key", "sequenceNumber" : ”sequence number"; }] // a list of records

checkpoint "checkpoint" : ”sequence number", "error" : NameOfException"

shutdown "reason" : “TERMINATE|ZOMBIE"

40

Page 41: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

【参考情報】 KCL for Pythonプロパティ 項目 内容

failoverTimeMillis Workerが処理を継続できなくなり別なWorkerにフェイルオーバする時間(ミリ秒) 短い値を設定するとDynamoDBのPIOPS高くなるため注意が必要

maxRecords 1回のデータ取得で取得するレコード件数

idleTimeBetweenReadsInMillis レコード取得間隔(ミリ秒)

callProcessRecordsEvenForEmptyRecordList

レコードデータが空でもレコード取得処理を継続するかの判断(True or Fault)

parentShardPollIntervalMillis 親のShardをチェックするインターバル 短い値を設定するとDynamoDBのPIOPS高くなるため注意が必要

cleanupLeasesUponShardCompletion shradが終了した後に継続して処理を続けるかクリーンアップするかを指定

taskBackoffTimeMillis KCLのバックオフタイムの設定

metricsBufferTimeMillis CloudWatchのAPIコールする前の時間

metricsMaxQueueSize CloudWatchのAPIコールする最大のキューサイズ

validateSequenceNumberBeforeCheckpointing

Checkpointingする前にシーケンス番号をチェックするかを指定

maxActiveThreads MultiLangDaemonの最大スレッド数

41

Page 42: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Pythonの例)KCL for Python実行方法

[ec2-user@ip-172-31-17-43 samples]$ amazon_kclpy_helper.py --print_command -j /usr/bin/java -p /home/ec2-user/amazon-kinesis-client-python/samples/sample.properties /usr/bin/java -cp /usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/amazon-kinesis-client-1.2.0.jar:/usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/jackson-annotations-2.1.1.jar:/usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/commons-codec-1.3.jar:/usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/commons-logging-1.1.1.jar:/usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/joda-time-2.4.jar:/usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/jackson-databind-2.1.1.jar:/usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/jackson-core-2.1.1.jar:/usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/aws-java-sdk-1.7.13.jar:/usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/httpclient-4.2.jar:/usr/lib/python2.6/site-packages/amazon_kclpy-1.0.0-py2.6.egg/amazon_kclpy/jars/httpcore-4.2.jar:/home/ec2-user/amazon-kinesis-client-python/samples com.amazonaws.services.kinesis.multilang.MultiLangDaemon sample.properties

出力結果をコピーして、シェルの入力としてペーストし、実行すると、KCLが実行されます 42

Page 43: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

KCLが使用するリソース

• DynamoDB – チェックポイントの情報などのステート管理

– デフォルトでRead/WriteのProvisioned Throughputが10で作成される • http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-

record-processor-ddb.html

• Cloudwatch – KCLアプリケーションのカスタムメトリックス

– 取得できるメトリックスは以下を確認してください • http://docs.aws.amazon.com/kinesis/latest/dev/monitori

ng-with-kcl.html

43

Page 44: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesisアプリケーションの運用

• AutoScaling • アプリケーションをモニター

– KCLメトリック • シャードごとのメトリック • プロセシングのレイテンシー • Record数・スループット • 関連するサービスのモニター

– DynamoDBなどのリトライの数、レーテンシー

• CloudWatchコンソール

• トラブルシューティング – アプリケーションが遅延してる場合は「MillisBehindLatest」を確認

44

Page 45: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ処理 基本デザイン

45

Page 46: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

基本デザイン 1/2

データソース

ロジック A

ロジック B SeqNo

(14) SeqNo (17)

SeqNo (25)

SeqNo (26)

SeqNo (32)

46

データ処理を行うアプリケーション側でリカバリーやロードバランシングを考慮した設計が必要

Kinesisの特徴であるシリアル番号を利用しチェックポイントを打つことが重要

1つのデータを複数のアプリケーションで利用できるためアプリケーション毎に追加・削除できる設計

本番データを用いて開発中のロジックの評価や複数のロジックを同じデータを用いて評価することが可能

Page 47: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

基本デザイン 2/2

Shardのキャパシティを意識する • Kinesisからのデータ読み出しは、5TPSか2MBps

• Kinesisにデータが書き込まれてから24時間はShardから読み出し可能

• ただし、Shardのキャパシティ(5TPSか2MBps)を超えて配置する場合は、ウエイトをいれる、または、Shardを増やす必要がある

データソース

アプリA

アプリB

キャパシティを超えてアクセスするとProvision Throughput Exceed Exceptionになる。

Page 48: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

基本構成パターン例

センサー

センサー

センサー

アプリ2

Dashboard アプリ1

Redshift

DynamoDB

48

Page 49: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ処理 パターン

49

Page 50: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

データ処理パターン

50

• Kinesis Connector Library

• AWS Lambda

• Amazon EMR Integration – Hadoop

• Amazon EMR Integration – Spark

• Apache Storm Integration

• その他

Page 51: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Connector Library

51

Page 52: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

• Data Recordの取得、変換、フィルタ、バッファ、書き出しを簡単に実装できるJavaのライブラリ。

• KCLを利用しているため、Workerの可用性などはKCLにお任せ。

ITransformer

•Kinesisか

らユーザが

使いやすい

モデルへの

変換

IFilter

•データのフィ

ルタリング。

フィルタリン

グして残った

ものがバッ

ファーへ行く

IBuffer

•指定のレコー

ド数か、バイ

ト数までバッ

ファー

IEmitter

•他AWS

サービスの

コール実施

S3

DynamoDB

Redshift

Kinesis

Kinesis Connector Library

ElasticSearch

52

Page 53: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Connector Library サンプルコード

public class S3Pipeline implements IKinesisConnectorPipeline<KinesisMessageModel, byte[]> { @Override public ITransformer<KinesisMessageModel, byte[]> getTransformer(KinesisConnectorConfiguration configuration) { return new JsonToByteArrayTransformer<KinesisMessageModel>(KinesisMessageModel.class); } @Override public IFilter<KinesisMessageModel> getFilter(KinesisConnectorConfiguration configuration) { return new AllPassFilter<KinesisMessageModel>(); } @Override

public IBuffer<KinesisMessageModel> getBuffer(KinesisConnectorConfiguration configuration) { return new BasicMemoryBuffer<KinesisMessageModel>(configuration); } @Override public IEmitter<byte[]> getEmitter(KinesisConnectorConfiguration configuration) { return new S3Emitter(configuration); } }

[Sample S3 pipeline]

JSONをByteArrayに変換

すべてパスするフィルタ

メモリ上にバッファ

S3に対して書き込み

53

Page 54: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Connector LibraryでEmitできるサービス

• S3

• DynamoDB

• Redshift

• Elasticsearch 1.2.1

54

Page 55: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis Connector Libraryに関するTips

• Kinesis Connector Libでは最低限の実装のみ提供しているため、要件に応じた実装が必要 – com.amazonaws.services.kinesis.connectors.interfaces内にあるイ

ンタフェースに対する実装

– 例)

• フィルタ

– 標準では、IFilterの実装は、フィルタしないAllPassFilterのみ実装として提供

• S3 Emitter

– バッファリングしたデータを1つのファイルとして指定したS3バケットの直下にEmitされます

– 階層構造などをとる必要がある場合は、S3Emitter.javaを改修してご利用ください

55

Page 56: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

【参考情報】 Blog: CloudWatch Logs Subscription Consumer + Elasticsearch + Kibana Dashboards

• VPC Flow LogをKinesis Connector Libraryを経由してElasticsearch/Kinabaで可視化する方法の記事 – http://aws.typepad.com/aws_japan/2015/08/cloudwatch-logs-subscription-

consumer-elasticsearch-kibana-dashboards.html

56

CloudWatch Logs

Kinesis Kinesis Application

VPC Flow Logs Elasticsearch

Kibana

Page 57: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

AWS Lambda

57

Page 58: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

AWS Lambdaとは

イベントをトリガーに独自コードをインフラを意識することなく実行できるマネージドサービス

AWSサービス / API からのイベント呼び出し コードの持ち込み オートスケール

Node.js, Java

データソース

PullモデルでLamdaがデータ取得

詳細はこちら http://www.slideshare.net/AmazonWebServicesJapan/20150701-run-codeinthecloud

58

Page 59: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis WorkerとしてLambdaを利用する場合のTips

• Shard Iterator Typeは、LatestかTrim horizonのみ指定可能 – LambdaのEvent Sourceの設定で指定

– シーケンス指定での実行ができないのでreplayしたい場合は、Trim horizonのみ

– エラー発生時のリトライ処理は別な仕組みを合わせて検討が必要。例えば、シーケンス番号をSQSなどに格納するなど。

• Kinesisからのデータ取得の最適化は、Batch Sizeで実施。 – デフォルトは、100レコード

– Lambdaでの処理内容に依存するが、レコード数が大きいほうが効率的に処理できる

• ShardのSplit, Mergeに追随してLambdaのWorkerが各Shardからデータ取得を行い、処理してくれる

59

Page 60: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon EMR - Hadoop

60

Page 61: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon EMR - Hadoop • EMR AMI 3.0.4以上のバージョンからKinesis Integrationが可能 ■ 利用用途

• Kinesisに集積されたデータをHive、PigなどのHadoopツールを用いてETL処理(Map Reduce処理)が可能

• 別のKinesis Stream, S3, DynamoDB, HDFSのHive Tableなどの他のデータソースのテーブルとJOINすることなども可能

• Data pipeline / Crontabで定期実行することにより、定期的にKinesisからデータを取り込み、処理することが可能

EMR Cluster S3

Data Pipeline

構成例

DataPipelineで定期的にHiveを実行しKinesisにあるデータを処理。 結果をS3に格納

Kinesis

61

Page 62: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon EMR - Hadoop

62

実行などは、以下のドキュメント・FAQサイトをみてください

• ドキュメント

– http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-kinesis.html

• FAQ

– http://aws.amazon.com/elasticmapreduce/faqs/#kinesis-connector

Kinesis Stream

EMR Hive Table

Data Storage

Table Mapping

(Hive利用例)

Page 63: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon EMR – Hadoop : Hiveの例

Hiveテーブル作成

Kinesis Streamを指定

HQLの実行(例)

通常のHQLを実行するだけ。内部的には、Kinesisからデータを取得し、処理を行う

63

Page 64: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

• 一度処理済みのデータをスキップするためにDynamoDBを使ってチェックポイントの管理される

• Data pipeline / Crontabで定期実行することにより、定期的にKinesisからデータを取り込み、処理することが可能

Amazon EMR – Hadoop : Hiveの例

64

[Provisioned Capacity] Read Capacity Units: j*s/5 Write Capacity Units: j*s (*) j = Num of Job, s = Num of Shard

Page 65: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon EMR - Spark

65

Page 66: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon EMR - Spark

EMR Cluster

Amazon Kinesis

センサデータ

PutRecords() Data

Sources

DStream Spark SQL Spark Shell

http://spark.apache.org/docs/latest/streaming-kinesis-integration.html 66

• Apache SparkをEMRクラスタ上に構築し、Kinesisのデータを収集・処理する

• Apache Spark 1.2.0以上からKCLが実装。

• EMR 4.0.0にApache Spark1.4.1が同梱 ( 2015年8月時点 )

• Spark Streamingでデータ処理を実装

Page 67: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Apache Storm

67

Page 68: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Apache Storm Integration • Apache Stormをデータ処理として利用するパターン • Boltをつなげることで高度なデータ処理をリアルタイムで分散処理が可能 • KinesisからApache Stormへのインテグレーションを容易にするためのSpout

を提供 https://github.com/awslabs/kinesis-storm-spout

Data Sources

Data Sources

Data Sources

Storm Spout

Storm Bolt

Storm Bolt

Storm Bolt

Page 69: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

【参考】Apache Storm Integration

AWS Bigdata Blog: • Amazon KinesisとApache Stormを使ったリアルタイムスライディン

グウィンドウの実装について記述されている

https://blogs.aws.amazon.com/bigdata/post/Tx36LYSCY2R0A9B/Implement-a-Real-time-Sliding-Window-Application-Using-Amazon-Kinesis-and-Apache

69

Page 70: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

その他のパターン

70

Page 71: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Kinesis MapReduceパターン

• Kinesisをパイプラインとして連結するパターン • FilterやMapReduceを多段Kinesisを用いて実現 • 最初のKinesisは、ピークトラフィックに対応しやすくするためにランダムな値を

パーティションキーとしてセットし、平準化し、次のストリームを生成し、伝送する

Data Sources

Data Sources

Data Sources

Kinesis App

Kinesis App

Kinesis App

Kinesis App

Filter Layer (例) Process Layer (例)

Page 72: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Presto-Amazon Kinesis connector by Qubole

• KinesisのStreamに対して直接PrestoのSQLを実行できる – QuboleというPresto as

a Serviceなら簡単に設定可能

• チェックポイントを使ってリアルタイム検出やダッシュボード等

http://aws.typepad.com/sajp/2015/07/presto-amazon-kinesis-connector-for-interactively-querying-streaming-data.html

72

Page 73: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon Kinesisの運用

73

Page 74: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

CloudWatchによるメトリックスの監視

• CloudWatchを通して以下のメトリックスを取得可能

• Shardの運用に利用することが可能

メトリックス

GetRecords.Bytes GetRecordsで取得されたデータバイト数

GetRecords.IteratorAge GetShardIteratorの有効時間

GetRecords.Latency GetRecordsのレイテンシー

GetRecords.Success GetRecords APIの成功した数

PutRecord.Bytes PutRecordで入力されたデータバイト数

PutRecord.Latency PutRecordのレイテンシー

PutRecord.Success PutRecord APIの成功した数

PutRecords.Bytes PutRecordsで入力されたデータバイト数

PutRecords.Latency PutRecordsのレイテンシー

PutRecords.Success PutRecords APIの成功した数

PutRecords.Records PutRecordsで成功したレコード数

IncomingBytes 指定した期間にPutに成功したデータバイト数

IncomingRecords 指定した期間にPutに成功したレコード数 74

Page 75: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

CloudWatchによるメトリックスの監視のポイント

• Shardのキャパシティ(データ入力側 1MB/sec, 1000 TPS、データ処理側 2 MB/sec, 5TPS)を意識する。

– 各APIのProvisionedThroughputExceededExceptionの発生数できないためキャパシティを意識して監視ポイントを設定する必要がある。(2014年12月現在)

• 各メトリックスは、Stream単位での値であるため以下の計算式で監視ポイントを設定する

– {Shardキャパシティ上限} x {Shard数} x {監視ポイント(%)}

(例: 80%超えたらShardを追加する場合)

1000TPS x 2Shards x 80%

75

Page 76: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Shardの分割とマージ

• Shardのキャパシティと実際の利用に応じてShardを分割またはマージしてサービスの拡張とコストの最適化が可能

• SpritShard APIで分割、MergeShards APIでマージすることができる。 – (SpritShard) http://docs.aws.amazon.com/kinesis/latest/APIReference/API_SplitShard.html

– (MergeShards) http://docs.aws.amazon.com/kinesis/latest/APIReference/API_MergeShards.html

AW

S En

dp

oin

t

Availability Zone

Shard 1 Shard 2 Shard N

Availability Zone

Availability Zone Shard

-1

Shard-2

Shard-1

Shard-2

Shard-3

Shard-4

分割

76

Page 77: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

SpritShardとMergeShardsの運用例

• 取り扱うデータの特性に合わせてShardを運用する – Shardは時間単位で課金されるため無駄なく利用するためにSpritとMergeを行うことを

推奨

• 以下は、業務量が多くなる時間帯にShardを分割し、業務が一段落したらマージする例

77

Page 78: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

SpritShard API

• SpritShardでは、担当するハッシュキーのスタートの値を指定する。

conn = KinesisConnection() descStream = conn.describe_stream(stream_name) for shard in descStream['StreamDescription']['Shards']: StartHashKey = shard['HashKeyRange']['StartingHashKey'] EndHashKey = shard['HashKeyRange']['EndingHashKey’] NewHashKey = (long(EndHashKey) - long(StartHashKey))/2 print "StartHashKey : ", StartHashKey print "EndHashKey : ", EndHashKey print "NewHashKey : ", str(NewHashKey) ret = conn.split_shard(stream_name,targetShard,str(NewHashKey))

Botoを利用した例:1Stream1Shardを半分に分割

StartHashKey : 0 EndHashKey : 340282366920938463463374607431768211455 NewHashKey : 170141183460469231731687303715884105727

上記、実行例)

78

Page 79: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

MergeShards API

• MergeShards APIでは、基とするShardとマージされるShardを指定する。

conn = KinesisConnection() conn.merge_shards(stream_name,targetShard, mergedShard)

Botoを利用した例

79

Page 80: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon Kinesis Scaling Utils

• コマンドラインでShardの管理ができるツール

– https://github.com/awslabs/amazon-kinesis-scaling-utils

java -cp KinesisScalingUtils.jar-complete.jar -Dstream-name=MyStream -Dscaling-action=scaleUp -Dcount=10 -Dregion=ap-northeast-1 ScalingClient Options: stream-name – ストリーム名 scaling-action – スケールアクション "scaleUp”, "scaleDown" or “resize" count – シャード数 pct – 既存シャードに対する増加減数(%) region – リージョン shard-id – ターゲットとするシャードID

80

Page 81: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

まとめ

81

Page 82: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

簡単管理

リアルタイムストリーミング

のデータ収集、処理のマネー

ジド・サービス

簡単にStreamの構築が可能

リアルタイム

ストリーミングタイプのビッ

クデータの継続処理

数分・数時間のバッチ処理と

比較して数秒以内で処理でき

伸縮自在

シームレスにスループット

レートやボリュームを変える

ことができる

ビジネスニーズに合わせてス

ケールのアップ・ダウンが変

更できる

S3, Redshift, &

DynamoDB

インテグレーション

データの収集、変換、処理し、

S3, Redshift及びS3に格納す

ることが容易に可能

リアルタイム処理

アプリケーション

Kinesis Client Libraryを用い

ることで容易にリアルタイム

ストリーミングデータの処理

の実装が可能

Low Cost

あらゆる規模のワークロード

に対してコスト効率が高い

Amazon Kinesis 特徴まとめ

Page 83: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

参考資料

• Amazon Kinesis API Reference – http://docs.aws.amazon.com/kinesis/latest/APIReference/Welcome.html

• Amazon Kinesis Developer Guide http://docs.aws.amazon.com/kinesis/latest/dev/introduction.html

• Amazon Kinesis Forum https://forums.aws.amazon.com/forum.jspa?forumID=169#

83

Page 85: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

補足資料: 事例紹介

85

Page 86: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

株式会社サイバーエージェント様

KinesisをPipelineでつないでデータ運搬フローの仕組みを実現し、収集基盤と分析基盤を分離 KCLを使い、ETL処理やRTB配信などのリアルタイム処理を実現

86 http://media.amazonwebservices.com/jp/summit2015/docs/Dev-07d-Tokyo-Summit-2015.pdf

リ アルタイムな処理とバッ チ処理 ~ Overview ~

A d v e r t is in g

S ite Tr a c k in g

A d Tr a c k in g

f e ed b a ck

f eed b a ck

ca m p a ig n m a n a g em en t x r e p o r tin g f o r A d ve r tise r

Ru n n in g Sp a r k w ith

YA RN o n EM R C lu s te r

リ アルタイムデータ処理アプリケーショ ンの導入例

a d -ca n d id a te co n su m e r

. . . a d -s tr ea m

. . .

. . . b id -s tr e a m

. . .

b id -ca n d id a te co n su m e r

複数のs t r e a m のデータを使いたい状況でどうする?

- a d -s t r e a m の流量は 2 ,0 0 0 r p s , s h a r d 数4

- b id -s t r e a m の流量は 4 0 ,0 0 0 r p s , s h a r d 数5 0

G e tR e c o r d sしたものを集約し 、

レコード 数を減らして再p r o d u c e!

ca n d id a te co n su m e r

リアルタイムターゲティング広告の配信・分析基盤にKinesisを利用

Page 87: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

株式会社イー・エージェンシー様

Audienceデータをリアルタイムに収集・処理する解析基盤にAmazon Kinesisを利用

用途に応じて、アプリケーションを追加していくAgilityが高いアーキテクチャを実現

エンジニア2名:4ヶ月で構築 マネージドサービスとSDKを利用することで圧倒的な早さで開発を実現。運用の手間なく開発にフォーカスでき、アプリケーションエンジニアのみでサービスを構築。

87

Page 88: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

あきんどスシロー様

88

回転すしのタグ情報をKinesisを経由してRedshiftに蓄積し、分析することで業務分析に利用

Page 89: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Ripplation様

ゲームログなどクロスプラットフォームデータ 収集基盤にKinesisを利用

参考資料 http://media.amazonwebservices.com/jp/summit2015/docs/Dev-05s_01-Tokyo-Summit-2015.pdf

Page 90: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

JMAS様

アプリの Beacon 対応を簡単・迅速に実現する 法人向けクラウドサービスであるBeacappをAWSを使って実現

設備管理や点検に

出退勤,受付,予約に

行動解析,状況把握に

エリア限定の 機能制限に

ショールーム等の 自動ガイドに

施錠,照明,空調管理に

90

Page 91: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

ネビラボ様 14種類のセンサーを選択し、プラグインしたデバイスからMQTTブリッジを経由してKinesisにデータを収集、DynamoDBなど他のAWSサービスを使ってセンサーデータの保存・可視化に利用

Page 92: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

イベント会場 騒音監視システム

騒音 センサー

ぷらっとホーム社 OpenBlocks

IoT BX1

認証: Amazon Cognito

データ収集: Amazon Kinesis

レポート登録 - 通知 - ワークフロー

イベントエンジン: AWS Lambda

リアルタイムモニタ: Amazon EC2

カスタマイズビュー

3日間:約259,200レコード 92

イベント会場の騒音をセンサーを通してKinesisに収集、閾値を超えた場合、kintoneにお知らせするデモシステム

Page 93: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Supercell様

93 https://aws.amazon.com/jp/solutions/case-studies/supercell/

Page 94: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

MediaMath様 (Marketing Tech )

規模

• 毎日1,200億のイベント

• 最高毎秒2million event

• 30+のAd exchange

• 30 ms avg response time

• 毎日3TB(圧縮後)

MediaMath様のFirehoseと呼ばれる複数のKinesis Streamを使ったシステムを作り、バッチとリアルタイム処理を実施 データの提供は、S3を利用

94 http://www.slideshare.net/AmazonWebServices/adv303-beating-the-speed-of-light-with-your-infrastructure-in-aws-aws-reinvent-2014

Page 95: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

DataXu様 ( Digital AdTech )

• ペタバイトスケールで、毎秒120万リクエスト • データはビッドの確認情報, 詐欺行為レコードなど • 継続的オフライン学習、リアルタイム予測継続的にアルゴリズムを改善 • 複数のプロセシングフレームワーク (The right tool for the right job) • すべてのデータはS3に保存

95 http://www.slideshare.net/AmazonWebServices/bdt306-missioncritical-stream-processing-with-amazon-emr-and-amazon-kinesis-aws-reinvent-2014

リアルタイムビディングデータのパイプラインとデータ処理システムを構築

Page 96: AWS Black Belt Tech シリーズ 2015 - Amazon Kinesis

Amazon S3

Amazon S3

Spark SQL JDBC Server

Dashboard

Amazon Redshift

Consumer

Amazon EMR

Consumer

Game DB

Game Servers

Kinesis

DynamoDB

DSV

JSON • イベントのサイズは1KB • 毎日5億のイベント • 毎日5GBのデータ(ピーク1TB)

GREE International様

96 http://www.slideshare.net/AmazonWebServices/gam301-realtime-game-analytics-with-amazon-kinesis-amazon-redshift-and-amazon-dynamodb-aws-reinvent-2014

ゲームサーバ、モバイルデバイス及びアドネットワークからのデータ収集・分析基盤を構築。データ保存、ニアリアルタイム集計、分析機能を実現