Kinesis と SQS の使い分けについて調べてみた [前編:Kinesis の概要を把握する。]

記事タイトルとURLをコピーする

こんにちは。🐱
技術課の山本です。

データを一時的に貯めておく役割を持つ Kinesis と SQS を比較してみようと思い、本記事を執筆していきます。
それぞれを利用する場面、非機能面の充実度合い、料金面について主に触れて、比較できたら良いなと考えています。
何かのお役に立ちますと幸いです。
まずはそれぞれの機能や特徴について記載し、最後に比較をしていこうと考えています。
まだ理解が浅く、概要レベルのブログです。ご承知おきください。
後編では SQS の概要を記述し、比較しようと思います。

Kinesis

Kinesis には、Kinesis Data Streams 、Kinesis Data Firehose、Kinesis Data Analytics 、Kinesis Video Streams があります。
Kinesis Video Streams は WebRTC を使い、音声やビデオなどをリアルタイム配信するためのサービスです。本記事では記載を割愛します。
Kinesis Data Analytics については、Kinesis Data Streams や Kinesis Data Firehose からの入力を SQL や Java を使って分析し、Kinesis Data Streams や Kinesis Data Firehose 、 Lambda に出力するサービスです。こちらも本記事では記載を割愛します。
SQS との比較のため、Kinesis Data Streams 、Kinesis Data Firehose に絞って、本記事は記載します。

Kinesis Data Streams 、Kinesis Data Firehose

概要を確認するために、以下の動画、スライドを確認しました。
動画は 2017 年の AWS Summit Tokyo 、スライドは 2016 年の AWS Summit Tokyo と古いものです。
Kinesis Data Firehose が東京リージョンに来てなかったり、古い情報があるものの、概要資料としては素晴らしいものと感じましたので、載せます。PDF もあります。

www.youtube.com

speakerdeck.com

特に上に挙げた 2017 年の AWS Summit Tokyo の動画は SQS との違いや、利用場面、使い方が解説されています。
私が役に立つと感じたスライドを抜粋します。

  • 上のスライドで説明していること
    • Kinesis Data Stream にデータを取り込む際に、シャードごとに秒間 1 MB 、 1000 トランザクション可能なこと
    • シャードからのデータ出力は最大で秒間 2 MB 可能なこと
    • データ出力の際には複数のリクエスト元から何回でも同じデータを読み込みできること
    • タイムベースイテレータ機能で、時間を指定してデータを読み込みできること。アプリケーションに障害が起きてリカバリをしたときに、Kinesis からは障害発生時点からのデータを取得できること。
    • データはデフォルトで 24 時間の保持期間になること

  • 上のスライドで説明していること
    • Firehose は S3 , Redshift , ElasticSearch (現 OpenSearch) に連携できる
      • 特にアプリケーションロジックを実装しないで、そのまま使える
      • ストリーミングデータを圧縮・暗号化してファイルとして送信する

  • 上の 2 つのスライドで説明していること
    • ユーザーが自撮りをアップロードして登録すると、登録者の数や性別・年代をグラフにしてくれるダッシュボードアプリ
    • 上記の構成でアプリを実装している

  • 上のスライドで説明していること
    • Kinesis のシャードごとに Lambda がリッスンする
    • 最新のデータを処理するのか、一番古いデータから順番に処理するのか、選べる。特定の日時を指定して、そこから処理することもできる

  • 上の 2 つのスライドで説明していること
    • Tableau のダッシュボードで、どの店舗でどういった商品が売れているのか、何のネタを追加すべきか把握できる。問題が発生している店舗を特定できる。

Kinesis Data Streams 、Kinesis Data Firehose まとめ

  • Kinesis に入れたデータを元に、ダッシュボードアプリ (OpenSearch や Tableau )などを用いて、現在のデータを使って判断を下すことができる。
    • リアルタイム分析
    • 過去のデータとの比較
    • 他のサービスと組み合わせたデータの分類と統計情報の取得
    • IoT センサー、スマホ、物理機器からのデータの統計、解析
  • Kinesis Data Streams 、Kinesis Data Firehose は、大きいデータ、多くのリクエストを処理できる。
    • Kinesis Data Streams にはシャードごとに秒間 1 MB & 1000 トランザクションのデータ書き込みが可能
      • 読み取りについては、最大で秒間 5 件のトランザクション。各読み込みトランザクションは最大 10,000 レコードを取得。トランザクションあたり 10 MB。
      • シャード数に上限はない。参考:クォータと制限 - Amazon Kinesis Data Streams
    • Kinesis Data Firehose についても同様に容量の大きい書き込み、多くのリクエストに対応可能
  • Producer (データの提供側) と Consumer (データの利用側) が存在する
    • Kinesis Data Firehose
      • Producer は Kinesis Data Streams や、CloudWatch Logs 、MSK 、Kinesis エージェント ( java で記述可能なクライアントアプリ) などになる。Kinesis エージェントなど ライブラリを使用する場合以外はプログラミングが不要。参考:Kinesis エージェントを使用した Kinesis Data Firehose への書き込み
      • Consumer は S3 , Redshift , OpenSearch , Splunk , DataDog , New Relic などとなる。圧縮ファイルを暗号化して送付する形式。Consumer 側ではデータを受け取るためのプログラミングなどは不要。
    • Kinesis Data Streams
      • Producer は Kinesis Producer Library 、Kinesis エージェント、AWS SDK などになる。AWS 上のサービスだと EC2 や ECS 、Lambda などのコンピューティングサービスから、ライブラリを使用して、データを書き込む。プログラミングすることが多い。
      • Consumer は Lambda や Kinesis Client Library 、Kinesis Data Firehose となる。Lambda や ECS 、EC2 などのコンピューティングサービスから、ライブラリを使用してデータを書き込む。プログラミングすることが多い。

以上でした。
後編では SQS の概要を記述し、比較しようと思います。執筆しましたらリンクを載せます。

余談

朝ランにハマっています。
雨が続いたので、富士山にも雪が積もったかな?と思って見に行ったものの、あんまり積もってなかったです。
また走りに行こうと思います。

山本 哲也 (記事一覧)

カスタマーサクセス部のエンジニア(一応)

好きなサービス:ECS、ALB

趣味:トレラン、登山(たまに)