🔫

初めてのAmazon Kinesis Data Streams ~概要編~

に公開

Kinesis Data Streams(KDS)とは

大量のストリーミングデータ(リアルタイムな連続データ)を収集・処理するためのサーバーレスストリーミングデータサービス。

KDSとは

KDSの構成要素


KDSの全体像

シャード

基本的な処理・保存の単位
1つのシャードが扱えるデータ量には制限があり、スループット向上のためには複数シャードでスケーリングする。

項目 内容
書き込み 最大1000レコード/秒、または1MB/秒
読み取り 最大2MB/秒(通常)、5回/秒
拡張 シャードの追加・分割・結合でスケール可能

プロデューサー

データをKinesisストリームに送信する側

  • 例:IoTデバイス、Webアプリなど
  • PutRecord / PutRecords APIを使用して、1件または複数件を送信可能
  • AWS SDKやKinesis Agent、KPL(Kinesis Producer Library)で実装

レコード

プロデューサーがストリームに送る最小単位のデータ

項目 内容
データ本体(Data) バイナリ形式(最大1MB)
パーティションキー シャード分配のための文字列
シーケンス番号 レコードの一意な識別子(シャード内で時系列順)

パーティションキーによる順序保証

データは「パーテイションキー」に基づいてシャードに振り分けられる。そして1つのシャード内では順序が保証されるため、同じキーを持つデータは常に同じシャードに入り、送信順で保持される。

送信順序 パーティションキー データ内容
1 user123 "ログイン"
2 user456 "ログイン"
3 user123 "ページ閲覧"
4 user123 "ログアウト"

このとき:

  • user123のデータは同じシャードに入る→1、3、4の順番が保証される
  • user456は別のシャードの可能性あり→user123との順番関係は保証されない

ストリーム

シャードの集合体で、Kinesisの論理的なデータの流れの単位
データはストリームに対して送信され、シャードに格納。

コンシューマー

Kinesisに送られたデータを読み取って処理する側。

タイプ 特徴
Standard Consumer シャードごとに2MB/sで共有。順番通りに処理
Enhanced Fan-Out 各コンシューマーが専用の読み取り帯域を確保。並列性◎

チェックポイント

コンシューマー(特にKCL)がどこまでデータを読み取ったかを追跡するための情報
通常はDynamoDBを使って記録。

KDSの重要ポイント

項目 内容
リアルタイム処理に最適 数百万件/秒のデータをミリ秒単位で取り込み可能
シャードのスケーラブル構成 シャード数を調整することで、処理能力を自動にスケール
データ保持が可能 デフォルトで24時間、最大365日
コンシューマー構成が柔軟 複数のアプリから同時読み取り可能
プロデューサーとの独立設計 プロデューサーとコンシューマーを独立にスケーリング可能

重要用語集

Kinesis Producer Library(KPL)

プロデューサーアプリケーション実装用のライブラリ。C++で開発されており、Javaアプリケーションに組み込むことでアプリケーションイベントをストリームへ配信。メトリクスをAmazon CloudWatchへ自動送信。

  • 複数件のデータを1データレコードに集約
  • 複数データレコードをバッファリングして送信

各種設定をプロパティベース調整可能

  • エラー時のリトライ挙動
  • タイムアウト時間の調整
  • データ送信時に利用するコネクション数

Kinesis Client Library(KCL)

Kinesis Data Streams用にJavaで開発されたConsumerライブラリ。
Ruby、Python、Node.js、.NETから利用可能。
アプリケーションの処理状況をDynamoDBに保存することで、中断箇所からの再開やノード間での処理引き継ぎを可能にする。
Kinesis Producer Libraryで集約されたレコードの集約解除をサポート。

Kinesis Agent

ログファイルなどを自動でKinesis Data StreamsやFirehoseに送信する、AWS提供のスタンドアロンアプリケーション。

特徴

  • ローカルのファイルを継続的に監視して、変更があれば自動でKinesisに送信
  • 再送処理・エラーハンドリング・圧縮などを自動で実施
  • インストール後の設定が簡単(JSON形式の設定ファイル)

サーバー側の暗号化

ユーザーが指定するAWS KMSカスタマーキーを使用して、保管中になる前にデータを自動的に暗号化するKinesis Data Streamsの機能。データは、Kinesis Streamsストレージレイヤーに書き込まれる前に暗号化され、ストレージから取得された後で復号される。

まとめ

Amazon Kinesis Data Streamsは、大量のストリーミングデータをリアルタイムで取り込むためのサービス。
データはシャード単位で分割管理され、数秒以内に処理が可能。
ログ分析やIoT、アプリのクリック情報収集などに活用される。

Discussion