26
JAWS-UG CLI #22 Amazon Kinesis 入入 2015 / 06 / 22 入入

JAWS-UG CLI #22 Amazon Kinesis

Embed Size (px)

Citation preview

Page 1: JAWS-UG CLI #22 Amazon Kinesis

JAWS-UG CLI #22Amazon Kinesis 入

門2015 / 06 / 22 開催

Page 2: JAWS-UG CLI #22 Amazon Kinesis

ハンズオンの注意点 !!

• Kinesis は無料枠ありません。必ず利用料金が発生するためご注意ください。– 本家の料金表 http://aws.amazon.com/jp/kinesis/pricing/

• ハンズオン後は、確実に Kinesis Stream を 削除してください

Page 3: JAWS-UG CLI #22 Amazon Kinesis

自己紹介

長尾 太介 (ナガオ ダイスケ)$ echo “ 某製造業で \ > 物理シミュレータ開発・展開 \ > スパコン環境の導入・お世話 \ > IoT も担当になったり・・・・”$ echo “ twitter: daikumatan”$ echo “EC2(c4.8xlarge), Kinesis, は俺の嫁!”

Page 4: JAWS-UG CLI #22 Amazon 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.

Page 5: JAWS-UG CLI #22 Amazon Kinesis

Kinesis 概要Kinesis ハンズオンに必要な知識

Page 6: JAWS-UG CLI #22 Amazon Kinesis

Kinesis とは

App1

App2

App3

A

A

A

A

Producer ConsumerKinesis

センサ

スマホ

データレコードの PUT データレコードの GET

例 : ダッシュボード

例 : 分析

例 : 機械学習

データの収集・蓄積

大規模なストリーミングデータをリアルタイムで収集可能なフルマネージドなサービス

Page 7: JAWS-UG CLI #22 Amazon Kinesis

Kinesis の特徴

App1

App2

App3

A

A

A

A

Producer ConsumerKinesis

センサ

スマホ

データレコードの PUT データレコードの GET

例 : ダッシュボード

例 : 分析

例 : 機械学習

データの収集・蓄積リアルタイ

ムな処理

同じデータを複数の経路から取得できる。つまり用途により経路分けでき便利!

高い信頼性、耐久性。複数の AZに 24 時間保存。

スケーラビリティー(入出力増えても後述のshard 数を増減することで対応)

Page 8: JAWS-UG CLI #22 Amazon Kinesis

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

Page 9: JAWS-UG CLI #22 Amazon Kinesis

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

Page 10: JAWS-UG CLI #22 Amazon Kinesis

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

出力側

Page 11: JAWS-UG CLI #22 Amazon Kinesis

shard の分割・マージ

shardId-0

shardId-1

shardId-2

shardId-3

Create

シャードの分割 シャードの分割

shardId-4shardId-5

シャードのマージ

シャードは分割・マージにより新しい ID のシャードが生成されるshardId-0 に put したデータは、分割・マージ関係なく shardId-0 に存在( あたらしい shardId に引き継がれない )

** マネージメントコンソール上からできないので注意 **

Time

Page 12: JAWS-UG CLI #22 Amazon Kinesis

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

Page 13: JAWS-UG CLI #22 Amazon Kinesis

データレコードの 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 へ振り分けられる

Page 14: JAWS-UG CLI #22 Amazon Kinesis

【 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( 不可逆 )

Page 15: JAWS-UG CLI #22 Amazon Kinesis

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

Page 16: JAWS-UG CLI #22 Amazon Kinesis

シーケンスナンバー

shardId-0

shardId-1

Kinesis StreamData Record

パーティションキー

データ

MD5

データレコードは Stream 内 でユニークなシーケンス番号が付与されるシーケンス番号は、基本的には時系列に付与される(保証するにはオプションを付与)

A(12)

C(14)

B(13)

A

パーティションキー

データ

シーケンスナンバ

Data Record

BC

Page 17: JAWS-UG CLI #22 Amazon Kinesis

データレコードの 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

Page 18: JAWS-UG CLI #22 Amazon Kinesis

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

Page 19: JAWS-UG CLI #22 Amazon Kinesis

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

Page 20: JAWS-UG CLI #22 Amazon Kinesis

Kinesis 利用のポイント・注意点• Shard はできるだけ均等に使おう!

– Shard を均等に使うことで、 Kinesis の性能を十分に引き出せ、コストメリットが得られる

– 1 つのセンサーでもパーティションキーをランダムとし、すべてのShard にデータレコードを均等に振り分けるほうがベター

• Kinesis Stream の混雑状況はマネージメントコンソール上から確認できる– Shard 毎の混雑状況は現状確認不可であることに注意

• Shard 数の変更(分割・マージ)は、マネージメントコンソールからはできないので注意しよう

Page 21: JAWS-UG CLI #22 Amazon Kinesis

ハンズオン概要AWS CLI による Kinesis の操作

Page 22: JAWS-UG CLI #22 Amazon 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 オレンジ色はハンズオンで使用します

Page 23: JAWS-UG CLI #22 Amazon Kinesis

ハンズオン構成

Stream

Shard

Prod

ucer

Shard

Kinesis

ABC

A

B

Cons

umer A

C

B

C

AWS CLIAWS CLI

ハンズオンではプロデューサー、コンシューマとも手元のマシンで!

実用上は、 CLI から put, get をしない可能性高いです。運用屋さんのゴールは基本事項の理解と、シャードの分割・マージの動作が CLI でできるようになること・・・・・

Page 24: JAWS-UG CLI #22 Amazon Kinesis

ハンズオンの流れと使用するコマンド

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

Page 25: JAWS-UG CLI #22 Amazon Kinesis

ハンズオンの流れと使用するコマンド

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

$ ストリームの削除はかならず行

いましょう。 \

> 課金されます!

Page 26: JAWS-UG CLI #22 Amazon Kinesis

参考• 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