初めての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