Continuous Ops

Exploring the world of 'Infrastructure as Code'

AWS Summit Tokyo 2014: Amazon Kinesis Deep Dive

ソリューションアーキテクトの大谷さんと開発マネージャの堀さんによる、Kinesisの詳説です。 Kinesisの開発マネージャの方が解説してくれたこともあり、とても意義あるものでした。

Kinesisの新規ローンチ

事例紹介

Kinesis詳細

なぜリアルタイム?

  • 測定(Metering)サービス 使った分だけ課金されるという特性 オペレーションを測定しないといけない
  • 毎秒数千万レコード
  • 毎時数テラバイト
  • 数十万のデータ・ソース
  • 月末にはオーディターでの100%の正確性

  • 毎時数百万のファイル

  • スケールの課題
  • リアルタイムの要望
  • 高い運用コスト

  • 要求の変化 毎時か毎日のデータ処理が従来の要求だったが、リアルタイム、早い意思決定、KeepEverything、エラスティックな拡張性、複数の目的に応じて同じデータを並行処理したい、などの新しい要求が出てきた。

Kinesis概要

用途単位でStreamを作成し、Streamは1つ以上のShardで構成される Shardは入力側秒間1MB 1000TPB 出力側2mB, 5TPSのキャパシティ 入力されたデータは複数のAZに24時間保存 Shardの増減でスケール

データ入力

HTTPS/POSt SDK Fluentd Flume Log4J etc

ProducerがPut Recordするサンプル AWS CLIでできる

Shardへの分配ロジック: md5でハッシュ化して該当のShardに分配される パーティションキーを何にするかは重要

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

シーケンス番号を使って何度でも読むことができる 何度取得してもシーケンス番号の順番は変わらない:重要

データ取得と処理

API Kinesis Client Library/ConnectorLibrary Storm EMR

どうやって信頼性と拡張性のあるアプリケーションを作るの?

  • Kinesis Client Libraryを提供
    • Shardと同じ数のWorker
    • Workerを均等にロードバランシング
    • 障害完治と新しいWorkerの立ち上げ
    • shardの数に応じてWorkerが動作する
    • Autoscaling
    • チェックポインティング、At least once処理

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

重複データについて

ネットワーク障害や500レベルエラーはリトライをする リカバリやロードバランシングでデータが最後のチェックポイントからリプレイされる

  • ユースケースを理解する
    • 冪等なアプリをつくる
    • 重複を許容する

Kinesis Connector Library

S3, DynamoDB, Redshift 4つのインタフェースを使うと簡単に書ける

1つのデータをいろいろなシステムで プロデューサーの負荷軽減 データの一貫性を保ちたい

Kinesisに全てのデータを1回入力する 必要に応じて新しいアプリを追加していく Agilityを高める

Elasticな拡張性

  • Streamは1つ以上のキャパシティで構成 Shardでキャパシティプランニング
  • SplitShard API Shardを半分に分割

shardやEC2もキャパシティがある ProvisionedThroughputExceededException

shard1つで14$/month Getトランザクションは無料