Amazon  Kinesisで広がる
リアルタイムデータ
プロセッシングとその未来
アマゾンデータサービスジャパン株式会社
⼤大⾕谷  晋平
榎並  利利晃
⾃自⼰己紹介
!  名前:⼤大⾕谷  晋平
•  ohtani@amazon.co.jp
•  @shot6
!  仕事:
•  お客様のクラウド活⽤用アーキテクチャ⽀支援
•  エマージングソリューション部
!  担当技術分野
•  ビッグデータ、データベース、分散システム
⾃自⼰己紹介
!   名前:  榎並  利利晃  (えなみ  としあき)
!   現職:  Partner  Solution  Architect
!   前職:  通信キャリア、電機メーカ、ゲーム会社でのシス
テム構築・サービス運⽤用経験
!   3年年間  AWSユーザとしてサービス運⽤用
!   好きな  AWS  のサービス  :  Kinesis、S3
Kinesisとは
フルマネージドな
リアルタイムデータ処理理サービス
AWSが提供する
ビックデータソリューションとKinesisのポジション
DynamoDB RedshiftRDS EMR
提供中サービス
クエリー
タイプ
バッチタイプ
(Map-‐‑‒Reduce)
新しいサービス
ストリーム
タイプ
Kinesis
!   構造化されたデータ
に対してクエリー処
理理を実⾏行行可能
!   ⼤大量量データに対する
インデックス処理理を
事前に⾏行行う
!   半構造化されたデー
タに対してデータ処
理理を数回実⾏行行
!   事前処理理なしで実⾏行行
!   半構造化データをストリームで処理理
!   シンプルなデータ処理理
!   他システムへのデータ転送
Amazon  Kinesis
フルマネージドなリアルタイムデータ処理理サービス
	
  Data	
  
Sources	
  
App.4	
  
	
  
[Machine	
  
Learning]	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
	
  
	
  
AWS	
  Endpoint	
  
App.1	
  
	
  
[Aggregate	
  &	
  
De-­‐Duplicate]	
  
	
  Data	
  
Sources	
  
Data	
  
Sources	
  
	
  Data	
  
Sources	
  
App.2	
  
	
  
[Metric	
  
Extrac=on]	
  
S3
DynamoDB
Redshift
App.3	
  
[Sliding	
  
Window	
  
Analysis]	
  
	
  Data	
  
Sources	
  
Availability
Zone
Shard  1
Shard  2
Shard  N
Availability
Zone
Availability
Zone
使いやすさ リアルタイム処理理
⾼高スループット
/伸縮⾃自在性
インテグレー
ション アプリ開発SDK 低コスト
今すぐ始められる⼿手軽さ
!   Management  Consoleで簡単セットアップ
ウィザード形式で
Streamが作成できる
キャパシティ、レイテン
シーをモニタリング。
Cloud  Watchで監視も可能
(*)  APIでも操作可能!
Amazon  Kinesisの仕組み
Kinesisはどのように動いているか?
ストリーム
シャード
シャード
データ
レコード
データ
レコード
データ
レコード
データ
送信側
Kinesis	
  
アプリケーション	
  
Kinesis	
  
アプリケーション	
  
Kinesis
アプリケー
ション
Kinesis
データレコード、ストリーム、シャード
ストリーム
シャード
シャード
データ
レコード
データ
レコード
データ
レコード
データレコード、ストリーム、シャード
ストリーム
シャード
シャード
データ
レコード
データ
レコード
データ
レコード
パーティションキーをハッシュ化
(MD5)した値を基にシャードに
分配する
Max:
  256Byte
データブロブ
パーティ
ションキー
シーケンス
ナンバー
Max:  50KB
アプリケーションで指定
Kinesisで指定
データレコード、ストリーム、シャード
ストリーム
シャード
シャード
データ
レコード
データ
レコード
データ
レコード
•  ストリームの中にシャードがある
•  ストリームにPutされたデータは複数DC
に複製されて24時間保存される
•  シャードは固定化されたキャパシティ
データレコード、ストリーム、シャード
ストリーム
シャード
シャード
データ
レコード
データ
レコード
データ
レコード
•  シャード毎にキャパシティが決まっている
•  READ  :  5  TPS  or  2MB/sec
•  WRITE  :  1000  TPS  or  1MB/sec
•  スケールはこのシャードを追加することで
増加する事が可能
データレコード、ストリーム、シャード
ストリーム
シャード
シャード
データ
レコード
データ
レコード
データ
レコード
0
MD5  Range
2128
シャード-‐‑‒1
(2128/2  -‐‑‒  2128)
データ
レコード
MD5
(パーティションキー)
シャード-‐‑‒0
(0  -‐‑‒  2128/2)
シャードとシーケンスナンバーの関係
ストリーム
シャード
シャード
データ
レコード
データ
レコード
データ
レコード
•  シャード内にほぼシーケンスナンバー順に  
データが⼊入ってくる
シャード
データ
レコード
(14)
データ
レコード
(15)
データ
レコード
(17)
データ
レコード
(19)
データ
レコード
(20)
Kinesisアプリケーション(KCL)
ストリーム
シャード
シャード
Kinesis
アプリケー
ション
(KCL)
Kinesis
アプリケー
ション
(KCL)
ワーカー シーケンスナ
ンバー
AAA
BBB
12345
98765
24680
データ
レコード
(24680)
データ
レコード
(12345)
データ
レコード
(98765)
データブロブ
パーティ
ションキー
シーケンス
ナンバー
AAA
BBB
DynamoDB
Kinesisアプリケーション(KCL)
ストリーム
シャード
シャード
Kinesis
アプリケー
ション
(KCL)
Kinesis
アプリケー
ション
(KCL)
ワーカー シーケンスナ
ンバー
AAA
BBB
12345
98765
24680
データ
レコード
(24680)
データ
レコード
(12345)
データ
レコード
(98765)
データブロブ
パーティ
ションキー
シーケンス
ナンバー
AAA
BBB
DynamoDB
1.  KCLがシャードからデータを取得
2.  設定された間隔でシーケンスナンバーを
そのワーカーのIDをキーにした
DynamoDBのテーブルに格納
⽬目的に応じてKinesisアプリケーションを追加
ストリーム
シャード
シャード
Kinesis
アプリ
S3ストア用
Kinesis
アプリ
S3ストア用
データ
レコード
(24680)
データ
レコード
(12345)
データ
レコード
(98765)
S3-‐‑‒1
S3-‐‑‒2
Kinesis
アプリ
DynamoDB
ストア用
Kinesis
アプリ
DynamoDB
ストア用
D-‐‑‒1
D-‐‑‒2
Amazon  Kinesis使⽤用例例
Raspberry  pi  +MQTT
リアルタイムダッシュボード
Kinesis	
  App	
  
[Real=me	
  
ETL]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
Raspberry  pi
!   Raspberry  pi  +  温度度センサ(ADT7410)
21
!   I2CでRaspberry  piと温度度センサを接続
!   10秒間に1回センサからデータを取得
!   Raspberry  piから直接KinesisにPut
!   Kinesis  アプリで、異異常検知とデータ格納
MQTT
!   M2M向けのpub/subモデルの軽量量プロトコル
!   メッセージの軽量量かつ⾼高速な配信に特化している
!   仕様
•  http://public.dhe.ibm.com/software/dw/webservices/ws-‐‑‒
mqtt/mqtt-‐‑‒v3r1.html
!   実装
•  Mosquitto  :  オープンソースのMQTTブローカー実装
•  http://mosquitto.org/
!   こちらを使ってRaspberry  piからアップロード
•  MQTTプロトコルは直接受けれないのでアダプタ経由
22
Raspberry  pi  +MQTT
リアルタイムダッシュボード
Kinesis	
  App	
  
[Real=me	
  
ETL]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
import  paho.mqtt.publish  as  publish
publish.single("mqttkb/test",  "boo",  hostname=”xxxx")
Raspberry  pi  +MQTT  
リアルタイムダッシュボード
Kinesis	
  App	
  
[Real=me	
  
ETL]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
MQTT-‐‑‒Kinesisアダプタ部分をみてみましょう
Raspberry  pi  +MQTT  
リアルタイムダッシュボード
Kinesis	
  App	
  
[Real=me	
  
ETL]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
Raspberry  pi  +MQTT
リアルタイムダッシュボード
Kinesis	
  App	
  
[Real=me	
  
ETL]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
KinesisアプリケーションでDynamoDBへ
書く部分をみてみましょう
Raspberry  pi  +MQTT
リアルタイムダッシュボード
Kinesis	
  App	
  
[Real=me	
  
ETL]	
  
Frontend	
  
[MQTT	
  Proxy]	
  
Frontend	
  
[MQTT	
  Proxy]	
   Kinesis  Client  LibraryはPythonで
はまだないんです。。。
では動画でみてみましょう!
28
Amazon  Kinesis
アプリケーション開発
Kinesisアプリケーション開発
!   Kinesis  SDK
•  最もベーシックなSDK
!   Kinesis  Client  Library(KCL)
•  https://github.com/awslabs/amazon-‐‑‒kinesis-‐‑‒client  
!   Kinesis  Connectors
•  https://github.com/awslabs/amazon-‐‑‒kinesis-‐‑‒connectors  
!   Kinesis  Storm  Spout
•  https://github.com/awslabs/kinesis-‐‑‒storm-‐‑‒spout  
!   EMR  Connector
•  EMRのAMIに同梱
30
Kinesis  Client  Library(KCL)
!   Kinesisアプリを作りやすくするJavaフレームワーク
•  DynamoDB,  CloudWatch,  AutoScalingを利利⽤用
•  ワーカーが死んだ時にオートスケール+担当シャードアサイン
!   作るもの
•  ブートストラップ
•  IRecordProcessorFactoryを継承したファクトリー
•  IRecordProcessorを継承したプロセッサー
31
ブートスト
ラップ
ファクトリ
ー
プロセッサ
ー
ワーカー
⽣生成 ⽣生成
⽣生成
実⾏行行
利利⽤用
サンプル
32
Kinesis  WebHDFSコネクター作ってみた
!   KinesisからEMRのHDFSに簡単にデータを送りたい
!   というわけで、WebHDFSのREST経由でやってみた
!   リアルタイム  TO  バッチのシームレス連携
33
RESTで送信
HTTP  PUT  
http://xxx.9101/webhdfs/v1/user/ohtani/file
?op=create&user.name=hadoop
Kinesis EMR
Client
こんな感じになりました
34
ログ⽣生成側
Kinesis  WebHDFSコネクター
(EC2で稼働)
こんな感じになりました
35
Kinesis  WebHDFSコネクター
(EC2で稼働)
EMR  HDFSで
しっかり⽣生成されている
Kinesis  Connectors
!   KinesisとAWSサービスの連携コネクタ
36
ITransformer
• Kinesis
から
ユーザ
が使い
やすい
モデル
への変
換
IFilter
• データの
フィルタ
リング。
フィルタ
リングし
て残った
ものが
バッ
ファーへ
⾏行行く
IBuffer
• 指定のレ
コード数
か、バイ
ト数まで
バッファ
ー
IEmitter
• 他AWS
サービ
スの
コール
実施
S3
DynamoDB
Redshift
Kinesis
Amazon  Kinesisと
アーキテクチャ
AWSを使ったアーキテクチャイメージ
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
	
  
	
  
AWS	
  Endpoint	
  
	
  
Kinesis	
  	
  
App.1	
  
	
  
	
  
Kinesis	
  	
  
App.2	
  
	
   Redshift
DynamoDB
	
  
Kinesis	
  	
  
App.3	
  
Availabilit
y Zone
Shard  1
Shard  2
Shard  N
Availabi
lity
Zone
Availabi
lity
Zone
RDS
企業内データ
アナリスト
BIツールで
統計分析
データ  as  a  Serviceを提供
エンドユーザ向けサービス提供
S3
企業データ
の保存	
  
エンドユーザへの通知
Kinesisによるストリーム保存
サンプルアーキテクチャ
!   Streamをパイプラインのようにつなげてデータ処理理を⾏行行うパターン
Data	
  
Sources	
  
Data	
  
Sources	
  
Data	
  
Sources	
  
Kinesis	
  
App	
  
Kinesis	
  
App	
  
Kinesis	
  
App	
  
Data	
  
Sources	
  
Data	
  
Sources	
  
Data	
  
Sources	
  
Kinesis	
  
App	
  
Kinesis	
  
App	
  
Kinesis	
  
App	
  
Kinesis	
  
App	
  
Data  Source群A
Data  Source群B
Data  Source群A⽤用ETL
(クレンジング)
Data  Source群B⽤用ETL
(クレンジング)
集計
KinesisとEMRの組み合わせで、
リアルタイムからバッチ処理理の連動
DynamoDB RedshiftRDS EMR
提供中サービス
クエリー
タイプ
バッチタイプ
(Map-‐‑‒Reduce)
新しいサービス
ストリーム
タイプ
Kinesis
!   構造化されたデータ
に対してクエリー処
理理を実⾏行行可能
!   ⼤大量量データに対する
インデックス処理理を
事前に⾏行行う
!   半構造化されたデー
タに対してデータ処
理理を数回実⾏行行
!   事前処理理なしで実⾏行行
!   半構造化データをストリームで処理理
!   シンプルなデータ処理理
!   他システムへのデータ転送
秒単位
分単位
時間
単位
⽉月単位
データの到達速度度⾮非常に⾼高速 ⾮非常に遅い
Kinesis Kinesis EMR EMR
DynamoDB
ElastiCache
Redis
S3DynamoDB
ElastiCache
Redis
Redshift
S3
Redshift
EMR
変換と集積化
データサイズは増加
KinesisとEMRはデータ変換の
ゲートウェイとして機能し、
各データベースは⽤用途によって変化
データ
収集
処理理単位ごとのデータ処理理ボリューム ⼤大規模⼩小規模
まとめ
!   Kinesisが可能にした事のは・・・
•  ストリーム処理理をサービスとして提供する事で、  
全く新しいアプリケーションを可能にした
•  まだまだユースケースはあるはず
!   Kinesis  +  AWSサービスを使うと・・・
•  ストリームのリアルタイム処理理から、バッチ処理理ま
でシームレスにデータをながせる
!   というわけで皆さん試してみてください!
42
ご清聴ありがとうございました!
アマゾンデータサービスジャパン株式会社
⼤大⾕谷  晋平
榎並  利利晃

Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来