Edited at

[AWS] Kinesis Firehoseの自分まとめ


[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% の月間稼働率を保証