LoginSignup
19
20

More than 3 years have passed since last update.

[AWS] Kinesis Firehoseの自分まとめ

Last updated at Posted at 2019-06-28

[AWS] Kinesis Firehose

  • リアルタイムデータを指定先へ配信するための完全マネージド型サービス
  • Kinesisストリーミングデータプラットフォームの一部
  • アプリケーションの記述、リソース管理の必要なし
  • データ送信先のプロデューサーを設定すると指定した送信先にデータが自動的に配信される
  • データの配信前に変換するように設定も可能

主な配信先

  • S3
  • Redshift
  • Elasticsearch Service
  • Splunk

主要コンセプト

配信ストリーム

  • 基盤となるエンティティ
  • Firehoseの使用には配信ストリームを作成しそれに対してデータを送信する

record

  • データプロデューサーがFirehose配信ストリームに送信する目的のデータ
  • レコードの最大サイズは 1,000KB (1MB)

データプロデューサー

  • プロデューサーはFirehose配信ストリームにレコードを送信します
  • 例えば配信ストリームにログデータを送信するWEBサーバーはデータプロデューサー
  • Firehose配信ストリームが自動的に既存のKinesisからデータを読み取り配信先にロードするよう設定することもできる

バッファサイズおよびバッファ間隔

  • Firehoseは特定の期間、受信するストリーミングデータを特定のサイズにバッファして送信先に配信する
  • バッファサイズは MB単位 でバッファの間隔は 秒単位

データフロー

S3

  1. Firehoseにデータレコードが送信される
  2. バッファ設定に応じてバッファする
  3. バッファが設定値を超えたらS3へデータを配信する
  4. データ変換が有効の場合は元データを別バケットへバックアップ取得も可能 

データ配信

S3へのデータ配信頻度

  • バッファサイズとバッファ間隔によって決まる
  • 上記どちからを満たした場合データ配信がトリガーされる
  • 送信先へのデータ配信が配信ストリームへのデータ取り込みより遅くなった場合自動的に遅れを取り戻す

バッファサイズ

  • 1MB ~ 128MB
    • 圧縮前のサイズ
    • 通常はGZIPでの圧縮

バッファ間隔

  • 60秒 ~ 900秒

データ配信の失敗

  • Firehoseは配信が成功するまで最大24時間にわたり再試行する
  • Firehoseのデータ最大保持期間は24時間
  • 24時間を超えて失敗した場合はデータ消失する

S3のデータ整理

  • 配信されたデータはUTC時間のプレフィックスを YYYY/MM/DD/HH 形式で追加してS3に配信される
  • 任意の最上位フォルダとフォワードスラッシュを追加できる(myApp/YYYY/MM/DD/HH)
  • YYYY の前に任意のテキストを追加できる(myAppYYY/MM/DD/HH)
  • 配信ストリーム作成時に上記設定が可能

カスタムプレフィックス

  • Hive形式などのプレフィッスを指定可能
  • year=yyyy/month=mm/day=dd とか
  • 時間形式は `UTC となっている
    • JST と合わせる場合は -9h する必要がある

オブジェクトの命名規則

  • DeliveryStreamName-DeliveryStreamVersion-YYYY-MM-DD-HH-MM-SS-RandomString
  • DeliveryStreamVersion は1からはじまる
    • 配信ストリームの設定が変更されるたびに1ずつ増加する

入力レコード形式の変換

  • データをS3へ保存する前に入力データ形式をJSONから変換できる
  • Apache Parquet または Apache ORC に変換可能
  • ParquetとORCは容量を説やしJSONの行指向の形式に比べてより高速なクエリを可能にするカラム
  • JSON以外の場合(CSVとか)はまずはLambdaでJSONに変換することも可能

配信先(重要)

  • レコード形式の変換を行うと以下サービスに配信できなくなる

    • Elasticsearch Service
    • Redshift
    • Splunk
  • S3のみ有効

変換の要件

JSONを読み取るでシリアライザー

  • JSONに含まれるタイムスタンプの形式に応じてシリアライザーを選択する
  • 位置情報であれば OpenX JSON SerDe を使用する
    • yyyy-MM-dd'T'HH:mm:ss[.S]'Z' に対応している為

データの解釈方法を決定するスキーマ

  • AWS Glue を使用してデータカタログにスキーマを作成する
  • Firehoseはスキーマを参照し使用して入力データを解釈する
  • 参照

データをターゲットのカラム型ストレージ形式に変換するシリアライザー

  • ParquetORC から選択

SLA

  • 99.9% の月間稼働率を保証
19
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20