Upload
daisuke-nagao
View
446
Download
1
Embed Size (px)
Citation preview
JAWS-UG CLI #22Amazon Kinesis 入
門2015 / 06 / 22 開催
ハンズオンの注意点 !!
• Kinesis は無料枠ありません。必ず利用料金が発生するためご注意ください。– 本家の料金表 http://aws.amazon.com/jp/kinesis/pricing/
• ハンズオン後は、確実に Kinesis Stream を 削除してください
自己紹介
長尾 太介 (ナガオ ダイスケ)$ echo “ 某製造業で \ > 物理シミュレータ開発・展開 \ > スパコン環境の導入・お世話 \ > IoT も担当になったり・・・・”$ echo “ twitter: daikumatan”$ echo “EC2(c4.8xlarge), Kinesis, は俺の嫁!”
AWS CLI 直近のバージョンアップ• 1.7.35 2015/06/18
– Feature: aws ecs Add support for DeregisterTaskDefintion and environment variable overrides.
• 1.7.34 2015/06/12– Feature: nstallation Fix bundled installer when running python 2.6 (issue 1381)– Feature: Installation Fix minimum required version of pip to install the AWS CLI using
python2.6 (issue 1383)
• 1.7.33 2015/06/12– Feature: aws autoscaling Add support for attaching and describing load balancers.– Feature: aws ec2 Add support for VPC flow logs.– Feature: aws emr Add Spark support and managed policy support.– Feature: aws ecs Add support for updating container agent.
Kinesis 概要Kinesis ハンズオンに必要な知識
Kinesis とは
App1
App2
App3
A
A
A
A
Producer ConsumerKinesis
センサ
スマホ
データレコードの PUT データレコードの GET
例 : ダッシュボード
例 : 分析
例 : 機械学習
データの収集・蓄積
大規模なストリーミングデータをリアルタイムで収集可能なフルマネージドなサービス
Kinesis の特徴
App1
App2
App3
A
A
A
A
Producer ConsumerKinesis
センサ
スマホ
データレコードの PUT データレコードの GET
例 : ダッシュボード
例 : 分析
例 : 機械学習
データの収集・蓄積リアルタイ
ムな処理
同じデータを複数の経路から取得できる。つまり用途により経路分けでき便利!
高い信頼性、耐久性。複数の AZに 24 時間保存。
スケーラビリティー(入出力増えても後述のshard 数を増減することで対応)
B
Kinesis の構成要素(1 センサ 2 アプリケーションのケース )
Stream
Shard 0
Shard 1
Prod
ucer
Shard N – 1
Data Record
パーティションキー
データ
Kinesis
ABC
A
B
C パーティションキー
データ
シーケンスナンバ
Data Record
Cons
umer
(App
)
C
Cons
umer
(App
)
B
A
B
Kinesis の構成要素(1 センサ 2 アプリケーションのケース )
Stream
Shard 0
Shard 1
Prod
ucer
Shard N – 1
Data Record
パーティションキー
データ
Kinesis
ABC
A
B
C パーティションキー
データ
シーケンスナンバ
Data Record
Cons
umer
(App
)
C
Cons
umer
(App
)
B
A
Shard とは・・
shard
データ入出力のスループットに応じてユーザが shard を分割・マージ
• Shard は Kinesis のストリームの性能を決めるスループットの単位であり 1shard あたりの性能が定められている
• Kinesis は受け取ったデータを Shard に振り分け、データの Get はシャード毎となる
shard
StreamA
B
C
AC
1.0 MB/s1000 件 /s
入力側
2.0 MB/s5 件 /s
AC
出力側
shard の分割・マージ
shardId-0
shardId-1
shardId-2
shardId-3
Create
シャードの分割 シャードの分割
shardId-4shardId-5
シャードのマージ
シャードは分割・マージにより新しい ID のシャードが生成されるshardId-0 に put したデータは、分割・マージ関係なく shardId-0 に存在( あたらしい shardId に引き継がれない )
** マネージメントコンソール上からできないので注意 **
Time
B
Kinesis の構成要素(1 センサ 2 アプリケーションのケース )
Stream
Shard 0
Shard 1
Prod
ucer
Shard N – 1
Data Record
パーティションキー
データ
Kinesis
ABC
A
B
C パーティションキー
データ
シーケンスナンバ
Data Record
Cons
umer
(App
)
C
Cons
umer
(App
)
B
A
データレコードの PUT と shard への振り分け
shardId-0
shardId-1
Kinesis Stream
0 〜 2127 - 1
2127 〜 2128 -1
Data Record
例:“ PartitionKey”: “Strawberry”
データ ( 最大1MB) Strawberry の
MD5 < 2127
HashKeyRange<MD5 変換値 >152671225029124346138028806904891164316
Shard は MD5 の 2^128 通りのハッシュ値を分け合い、担当するレンジを持つパーティションキーは MD5 によりハッシュ値に変換され、データレコードは該当するレンジの shard へ振り分けられる
【 Tips 】:シェルによる MD5 の計算
PARTITION_KEY="Strawberry" VAL16=`echo -n ”${PARTITION_KEY}" | MD5 | tr a-z A-Z`VAL10=`echo "obase=10;ibase=16;${VAL16}" | bc` && printf "%039s\n" "${VAL10}"
152671225029124346138028806904891164316 # 元いちご ( 不可逆変換! )
( 例 ) コマンド(改行が入らないように注意。下記のように – n オプションをつける)
結果(ハッシュ値の 10 進数表示) : 10 進だと最大 39 桁ある
MD5入力値 ハッシュ値 (128bit)
NG( 不可逆 )
B
Kinesis の構成要素(1 センサ 2 アプリケーションのケース )
Stream
Shard 0
Shard 1
Prod
ucer
Shard N – 1
Data Record
パーティションキー
データ
Kinesis
ABC
A
B
C パーティションキー
データ
シーケンスナンバ
Data Record
Cons
umer
(App
)
C
Cons
umer
(App
)
B
A
シーケンスナンバー
shardId-0
shardId-1
Kinesis StreamData Record
パーティションキー
データ
MD5
データレコードは Stream 内 でユニークなシーケンス番号が付与されるシーケンス番号は、基本的には時系列に付与される(保証するにはオプションを付与)
A(12)
C(14)
B(13)
A
パーティションキー
データ
シーケンスナンバ
Data Record
BC
データレコードの GET とシーケンスナンバー
開始から24 時間
0 時間データ収集開始! Now!
A A
B
A
B
C
A
B
C
D E
B
C
D
Time
TRIM_HORIZON (最古のデータ)
LATEST( 最新データ )
パーティションキー
データ
シーケンスナンバ
Data Record【データ取得( GET )の流れ】STEP1: 対象とするシャードとシャードイテレータタイプを決定STEP2: イテレータ取得(データの取得位置が決定される)STEP3: データの取得 (GET)
AT_SEQUENCE_NUMBER
AFTER_SEQUENCE_NUMBER
シャ
ード
イテ
レー
タタ
イプ途中からデータを引っこ抜く場合はシーケンス番号が
必要
データを取り出す位置を決めるため、シャードイテレータが必要
Shar
d
B
Kinesis の構成要素(1 センサ 2 アプリケーションのケース )
Stream
Shard 0
Shard 1
Prod
ucer
Shard N – 1
Data Record
パーティションキー
データ
Kinesis
ABC
A
B
C パーティションキー
データ
シーケンスナンバ
Data Record
Cons
umer
(App
)
C
Cons
umer
(App
)
B
A
KPL / KCL および Lambda の利用例
A
A
Producer ConsumerKinesis
A
A
センサ
スマホ
Amazon Redshift
Amazon Lambda
Amazon S3
DynamoDB
KPL
ビジネスロジックに集中するためのライブラリ、 KPL(Kinesis Producer Library), KCL(Kinesis Client Library) を有効利用する(本資料では省略)。またフルマネージドな Lambda を積極的に利用する。 KCL は EC2 上で動作させる必要があり、 EC2 インスタンスの管理が必要となるため
Stream
KCL
Kinesis 利用のポイント・注意点• Shard はできるだけ均等に使おう!
– Shard を均等に使うことで、 Kinesis の性能を十分に引き出せ、コストメリットが得られる
– 1 つのセンサーでもパーティションキーをランダムとし、すべてのShard にデータレコードを均等に振り分けるほうがベター
• Kinesis Stream の混雑状況はマネージメントコンソール上から確認できる– Shard 毎の混雑状況は現状確認不可であることに注意
• Shard 数の変更(分割・マージ)は、マネージメントコンソールからはできないので注意しよう
ハンズオン概要AWS CLI による Kinesis の操作
Kinesis CLI 全コマンド• add-tags-to-stream• create-stream• delete-stream• describe-stream• get-records• get-shard-iterator• list-streams• list-tags-for-stream• merge-shards• put-record• put-records• remove-tags-from-stream• split-shard• wait オレンジ色はハンズオンで使用します
ハンズオン構成
Stream
Shard
Prod
ucer
Shard
Kinesis
ABC
A
B
Cons
umer A
C
B
C
AWS CLIAWS CLI
ハンズオンではプロデューサー、コンシューマとも手元のマシンで!
実用上は、 CLI から put, get をしない可能性高いです。運用屋さんのゴールは基本事項の理解と、シャードの分割・マージの動作が CLI でできるようになること・・・・・
ハンズオンの流れと使用するコマンド
Shard 0
Shard 1
Shard 2
Shard 3Create delete
create-stream
list-streams
describe-streamput-record
get-shard-iterator
get-records
#3 シャードの分割 #5 シャードの
マージ
Time#1 ストリームの作成 #2 データ
レコードの入力 / 取得
#4 複数 データレコードの一括入力 / 取得
#6 ストリームの削除
wait stream-exists
list-streamsdescribe-stream
list-streamsdescribe-streamsplit-shard put-records
get-shard-iterator
get-records
list-streamsdescribe-stream
list-streamsdescribe-streammerge-shards
list-streamsdescribe-streamdelete-stream
Kinesis Stream
Kinesis Stream
Kinesis Stream
ハンズオンの流れと使用するコマンド
Shard 0
Shard 1
Shard 2
Shard 3Create delete
create-stream
list-streams
describe-streamput-record
get-shard-iterator
get-records
#3 シャードの分割 #5 シャードの
マージ
Time#1 ストリームの作成 #2 データ
レコードの入力 / 取得
#4 複数 データレコードの一括入力 / 取得
#6 ストリームの削除
wait stream-exists
list-streamsdescribe-stream
list-streamsdescribe-streamsplit-shard put-records
get-shard-iterator
get-records
list-streamsdescribe-stream
list-streamsdescribe-streammerge-shards
list-streamsdescribe-streamdelete-stream
Kinesis Stream
Kinesis Stream
Kinesis Stream
$ ストリームの削除はかならず行
いましょう。 \
> 課金されます!
参考• http://www.slideshare.net/shot6/amazon-kinesis-32354587?related=1• http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-amazon-
kinesis• http://aws.typepad.com/sajp/2014/08/kinesis_01.html• http://dev.classmethod.jp/cloud/aws/aws-fullmanaged-bigdata/• http://aws.typepad.com/aws_japan/2015/06/amazon-kinesis-update-simplified-cap
ture-of-streaming-data.html
• http://media.amazonwebservices.com/jp/summit2015/docs/TE-07-Tokyo-Summit-2015.pdf
• http://media.amazonwebservices.com/jp/summit2015/docs/TA-11-Tokyo-Summit-2015.pdf