Your SlideShare is downloading. ×
AWS Black Belt Techシリーズ  Amazon Kinesis
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

AWS Black Belt Techシリーズ Amazon Kinesis

4,353
views

Published on

AWS Black Belt Tech Webinar 2014 …

AWS Black Belt Tech Webinar 2014
(旧マイスターシリーズ)

Amazon Kinesis

Published in: Technology

0 Comments
30 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,353
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
88
Comments
0
Likes
30
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Amazon Kinesis AWS Black Belt Tech Webinar 2014 パートナーソリューションアーキテクト 榎並 利晃
  • 2. Agenda • Kinesisを取り巻く環境 • Kinesis概要 • データの入力 • データの取得と処理 • Kinesisの運用 • サンプルアーキテクチャ • 事例 • まとめ
  • 3. Kinesisを取り巻く環境
  • 4. 多様で大量なデータとスピーディなビジネスニーズ M2M センサー オープンデータ IoT Web Logs リアルタイムにデータを処理する基盤に対する期待! POS Data
  • 5. 例えば、こんなユースケース サービスやシステムの リアルタイム状況把握 • キャンペーンの状況 把握 • ゲーム内イベントの 状況把握 • POSデータからの売 上状況把握 異常検知 • センサーの異常検知 • 不正アクセス検知 サービス向上 • ソーシャルデータを 用いたリアルタイム サービス • 直近の行動に基にし たリコメンデーショ ン
  • 6. AWSでの例:迅速かつ正確なメータリング情報の集計 毎秒数千万レ コードの利用 データ 何十万ものデー タソース 毎時数テラバイ トのデータ 毎日 100以上の ETL Job起動 毎時 100以上の クエリー • 求められるリアルタイムアラートの要求 • スケール出来る構造への変更 Kinesis
  • 7. Kinesis概要
  • 8. Amazon Kinesisとは? • ハイボリュームな連続したデータをリアルタイム で処理可能なフルマネージドサービス • Kinesisは、数十万のデータソースからの1時間辺 り数テラバイトのデータを処理することができ、 かつ、格納されたデータは、複数のAZに格納する 信頼性と耐久性をもつサービス
  • 9. Kinesis概要 AWS SDK LOG4J Flume Fluentd Get* APIs Kinesis Client Library + Connector Library Apache Storm Amazon Elastic MapReduce データ入力側 データ処理側
  • 10. 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 AWSEndpoint • 用途単位でStreamを作成し、Streamは、1つ以上のShardで構成される • Shardは、データ入力側 1MB/sec, 1000 TPS、データ処理側 2 MB/sec, 5TPSのキャパシティを持つ • 入力するデータをData Recordと呼び、入力されたData Recordは、24 時間かつ複数のAZに保管される • Shardの増加減によってスケールの制御が可能 Stream
  • 11. セットアップとモニタリング • Management Console/APIで簡単セットアップ Stream名とShard数を入力して Streamが作成できる。 キャパシティ、レイテン シーをモニタリング。 Cloud Watchで監視も可能
  • 12. コスト • 価格 料金 シャード利用料 $0.015/shard/時間 Putトランザクション $0.028/1,000,000PUT 例えば、1ヶ月 (30日)、10Shardで、月100,000,000PUTであれば、約$110/月
  • 13. データ入力
  • 14. データ入力方法 • PutRecord API でデータ入力が可能 – http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html • AWS SDK for Java, Javascript, Python, Ruby, PHP, .Net が利用可能 例)botoを利用してput_recordした例 http://docs.pythonboto.org/en/latest/ref/kinesis.html#module-boto.kinesis.layer1
  • 15. データ入力イメージ Stream Shard-0 Shard-1 Data Record Data Record Data Record Kinesisは、受け取ったデータをShardに振り分ける
  • 16. データ入力イメージ Stream Shard-0 Shard-1 Data Record Data Record Data Record Data Recordに設定されたパーティションキーを基にShard に分配 DataRecordの中身 データブロブ (Max 50KB) パーティ ションキー (Max 256B)
  • 17. Shardへの分配ロジック Shardは、担当するレンジを持ち、パーティションキーを MD5した値に合致した範囲のShardに分配される 例 0 MD5の範囲 2128 Shard-1 (2128/2 - 2128)MD5(パーティションキー) Shard-0 (0 - 2128/2) データブロブ パーティション キー 値によりどちら かに分配
  • 18. パーティションキーについてのTips TIPS • Shardは、Partition Keyを基に分配される • Shardには、キャパシティがある うまく分配できるようにPartition Keyを設計する 必要がある
  • 19. シャード シーケンス番号 Streamに入力されたData RecordにKinesisがStream内でユニークなシー ケンス番号を付与(時間経過と共に増加する仕組み) 連続してPutRecord APIが呼び出された場合、順序が変わる可能性がある。 同じパーティションキーの中で厳密に増加させる場合は、PutRecord APIの SequenceNumberForOrderingパラメータを設定する。 シーケンス番号は、PutRecord APIのレスポンスで取得できる データ レコード (14) データ レコード (15) データ レコード (17) データ レコード (19) データ レコード (20)
  • 20. SDK以外でデータを入力する • Log4J Appender – Log4JのアウトプットをデータレコードとしてKinesisに入力することができる Appender – バッファリングサイズ、同時スレッド数などを設定することができる – 詳細は、以下を参照 • https://github.com/awslabs/kinesis-log4j-appender • http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/kinesis- pig-publisher.html
  • 21. データの取得と処理
  • 22. データ取得方法 • 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 が利用可能 例)botoを利用してget_shard_iterator, get_recordsした例 http://docs.pythonboto.org/en/latest/ref/kinesis.html#module-boto.kinesis.layer1
  • 23. 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の動作イメージ
  • 24. Kinesis Client Library • GetShardIterator API及びGetRecords APIを用いることでデータの取得及びデー タ処理を行うことができるが、データを処理するインスタンスの耐障害性やShard の分割やマージの追随などの煩雑な処理を実装する必要がある。 • Kinesis Client Libraryを用いるとこれらの煩雑な処理を意識することなくビジネス ロジックに集中することができる。 • Kinesis Client Libraryは、Javaに対応 • Githubでソースを取得可能 – https://github.com/awslabs/amazon-kinesis-client • Kinesis Client Libraryは、チェックポイントの管理をDynamoDBを利用しており、 初回起動時に、自動的にDynamoDBテーブルが作成される。 – デフォルトで、Read Provisioned Throughput, Write Provisioned Throughputは、10で作成される。
  • 25. Kinesis Client Library • Kinesis Client Libraryを使ったアプリ(Kinesisアプリケーション)を実 行するとWorkerスレッドが立ち上がり、Kinesisからデータを取得を行う。 • Kinesisアプリケーション側では、コンフィグ設定とデータ処理部分を行 うためのIRecordProcessorの実装とそのファクトリを実装することで利 用可能 • 開発ガイドについては以下のサイトを参照 – http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-record-processor- app.html
  • 26. Kinesis Client Library サンプルコード public class SampleRecordProcessor implements IRecordProcessor { @Override public void initialize(String shardId) { LOG.info("Initializing record processor for shard: " + shardId); this.kinesisShardId = 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; } } } [Sample RecordProcessor ]
  • 27. Kinesis Client Library サンプルコード IRecordProcessorFactory recordProcessorFactory = new SampleRecordProcessorFactory(); Worker worker = new Worker(recordProcessorFactory, kinesisClientLibConfiguration); int exitCode = 0; try { worker.run(); } catch (Throwable t) { LOG.error("Caught throwable while processing data.", t); exitCode = 1; } [Sample Worker]
  • 28. 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 1. Kinesis Client LibraryがShardからData Recordを取得 2. 設定された間隔でシーケンス番号をそのワーカーのIDをキーにした DynamoDBのテーブルに格納 (*)実際のKey, Attribute名は異なります。
  • 29. Kinesis Client Libraryの動き – 可用性 Stream Shard-0 Kinesis アプリケーション (KCL) ワーカー シーケンス番号 Instance A → Instance B 12345 Data Record (12345) Data Record (24680) DynamoDB Instance A Kinesis アプリケーション (KCL) Instance B Instance Aがデータ取得されない状況を検知し、Instance Bが、DynamoDBに 格納されているシーケンス番号からデータ取得を行う (*)実際のKey, Attribute名は異なります。
  • 30. 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名は異なります。
  • 31. 目的に応じて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
  • 32. Kinesis Connector Library • Kinesis Connector Libraryを用いることにより、S3, DynamoDB、Redshiftといった他の サービスとのインテグレーションが容易 • Kinesis Connector Libraryは、Javaに対応 • Githubでソースを取得可能 – https://github.com/awslabs/amazon-kinesis-connectors RedShift DynamoDB S3 他のデータ処理のために保存 リアルタイムダッシュボード やランキングなどに利用 蓄積された過去のデータを用 いた多角的な分析に利用 Kinesis
  • 33. • Data Recordの取得、変換、フィルタ、バッファ、書き出しを簡単に実装できる。 ITransformer •Kinesisか らユーザが 使いやすい モデルへの 変換 IFilter •データのフィ ルタリング。 フィルタリン グして残った ものがバッ ファーへ行く IBuffer •指定のレコー ド数か、バイ ト数までバッ ファー IEmitter •他AWS サービスの コール実施 S3 DynamoDB Redshift Kinesis Kinesis Connector Library
  • 34. 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に対して書き込み
  • 35. Kinesis Storm Spout • KinesisからApache Stormへのインテグレーションを容易にするためのSpout • Kinesis Storm Spoutは、Javaに対応 • Githubでソースを取得可能 – https://github.com/awslabs/kinesis-storm-spout
  • 36. EMR Connector • Hive、Pig、Cascading、Hadoop Streamingといった使い慣れたHadoopのツールを 使って、Kinesis Streamのデータを取得し、Map Reduceの処理が可能 • ETL処理や別のKinesis Stream, S3, DynamoDB, HDFSのHive Tableなどの他のデー タソースのテーブルとJOINすることなども可能 – (例) Clickstream (Kinesis) JOIN Ad campaign data (DynamoDB) Kinesis Stream EMR Hive Table Data Storage Table Mapping (Hive利用例) http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-kinesis.html
  • 37. EMR Connector : Hive利用例 Hiveテーブル作成 Kinesis Streamを 指定 HQLの実行(例) 通常のHQLを実行するだけ。 内部的には、Kinesisからデー タを取得し、処理を行う
  • 38. • 一度処理済みのデータをスキップするためにDynamoDBを使ってチェックポイントの管理さ れる • Data pipeline / Crontabで定期実行することにより、定期的にKinesisからデータを取り込 み、処理することが可能 EMR Connector : Hive利用例
  • 39. Kinesisの運用
  • 40. 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の成功した数
  • 41. 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 AWSEndpoint Availability Zone Shard 1 Shard 2 Shard N Availability Zone Availability Zone Shard- 1 Shard- 2 Shard- 1 Shard- 2 Shard- 3 Shard- 4 分割
  • 42. SpritShardとMergeShardsの運用例 • 取り扱うデータの特性に合わせてShardを運用する – Shardは時間単位で課金されるため無駄なく利用するためにSpritとMergeを行うことを 推奨 • 以下は、業務量が多くなる時間帯にShardを分割し、業務が一段落したら マージする例
  • 43. 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 上記、実行例)
  • 44. MergeShards API • MergeShards APIでは、基とするShardとマージされるShardを指定する。 conn = KinesisConnection() conn.merge_shards(stream_name,targetShard, mergedShard) Botoを利用した例
  • 45. サンプルアーキテクチャ
  • 46. Digital Ad. Tech Metering with Kinesis Incremental Ad. Statistics Computation Metering Record Archive Ad Analytics Dashboard Continuous Ad Metrics Extraction
  • 47. 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 (クレンジング) 集計
  • 48. その他のAWSサービスと連携したアーキテクチャ AWSEndpoint Kinesis App.1 Kinesis App.2 Redshift DynamoDB Kinesis App.3 Availabilit y Zone Shard 1 Shard 2 Shard N Availabil ity Zone Availabil ity Zone RDS 企業内データ アナリスト BIツールで 統計分析 データ as a Serviceを提供 エンドユーザ向けサービス提供 S3 企業データ の保存 エンドユーザへの通知 Kinesisによるストリーム保存
  • 49. 事例紹介
  • 50. 導入事例 Amazon Kinesisにゲーム エ ンジン サーバーから送られる 何百ものゲームデータをリア ルタイムで送り、ビジネスに 不可欠な分析やダッシュボー ドアプリケーションを遅れる ことなく利用 データパイプラインとレポート のインフラだった、既存のバッ チに依存したデータ取得および 収集のメカニズムをAmazon Kinesisに置き換えることにより、 システム運用のリソースが削減 できた
  • 51. Gaming Analytics with Amazon Kinesis
  • 52. Kinesisの使いドコロ
  • 53. SQSとKinesisの使い分け • Kinesisは、Pub-Subメッセージモデルを構築でき、Stream内でユニーク なシーケンス番号がDataRecordに付与されるためオーダ順に処理するこ とができる SQS 送信者 Worker Worker 単一の処理に対して複数のWorkerが処理 Kinesis 送信者 Worker A Worker B 目的に応じたWorker(Kinesisアプリ) が同一の送信者のデータを利用可能
  • 54. リアルタイムダッシュボード • Webログ、センサーデータなどのリアルタイム情報の可視化用途 • 短期状況の可視化だけでなく長期分析にデータを流す センサー センサー センサー Kinesis App [アーカイブ] Dashboard Kinesis App [集計、異常検 知など] Redshift DynamoDB
  • 55. ETL処理 ログ ログ ログ • 後続に続くデータ処理の事前処理として利用 Kinesis App [ETL処理] S3 EMR
  • 56. バッファー Data Sources Data Sources Data Sources Kinesis App [Worker] • 大量データの一次バッファとして利用 • SQSでも同様の構成を構築可能 • Workerの部分にStormを配備する組み合わせも可能 Kinesis App [Worker]
  • 57. まとめ
  • 58. 簡単管理 リアルタイムストリーミング のデータ収集、処理のマネー ジド・サービス 簡単にStreamの構築が可能 リアルタイム ストリーミングタイプのビッ クデータの継続処理 数分・数時間のバッチ処理と 比較して数秒以内で処理でき る 伸縮自在 シームレスにスループット レートやボリュームを変える ことができる ビジネスニーズに合わせてス ケールのアップ・ダウンが変 更できる S3, Redshift, & DynamoDB インテグレーション データの収集、変換、処理し、 S3, Redshift及びS3に格納す ることが容易に可能 リアルタイム処理 アプリケーション Kinesis Client Libraryを用い ることで容易にリアルタイム ストリーミングデータの処理 の実装が可能 Low Cost あらゆる規模のワークロード に対してコスト効率が高い Amazon Kinesis 特徴まとめ
  • 59. 参考資料 • 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#
  • 60. Webinar資料の配置場所 • AWS クラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/
  • 61. ご参加ありがとうございました。