LoginSignup
18
8

AWSでストリームデータを扱うためのメッセージングサービス一覧(KDS, MSK, SQS, SNS, MQ)

Last updated at Posted at 2021-12-07

著者: 伊藤 雅博, 株式会社日立製作所

はじめに

AWSでストリーム処理を実現する際は、データをキューイングするメッセージングサービスと、キューイングしたデータをストリーム処理するサービスを組み合わせることが一般的です。本投稿では、AWSが提供する各メッセージングサービスの概要と、ストリームデータを扱う際の選択基準を紹介します。

なお、本投稿の内容は2020年中頃の調査結果をベースに、いくつか更新を加えたものです。AWSのサービス仕様は随時更新されるため、最新の仕様とは異なる場合があります。最新の情報はAWSの公式ドキュメントをご参照ください。

投稿一覧:

  1. AWSでストリームデータを扱うためのメッセージングサービス (本投稿)
  2. AWSのストリーム処理向けメッセージングサービスKDS(Kinesis)・MSK(Kafka)・SQSの特徴
  3. AWSのKinesis Data Analytics、EMR Spark Streaming、Lambdaによるストリーム処理の特徴

ストリーム処理におけるメッセージキューの役割

ストリームデータとは、リアルタイムに生成される大量のデータのことです。例えば、IoTデバイスやコネクテッドカーのセンサデータや、業務システムが生成するログデータなどです。これらのデータは常時・無制限に生成され、時期によりデータ流量が急増することもあります。

ストリーム処理では、このようなストリームデータを即時処理することで、バッチ処理では不可能なリアルタイム性の高いサービスを実現します。

streamdata.png

流量が不安定なストリームデータの処理では、データ流量が急増するとシステムの処理負荷が上昇します。その結果、サービスの稼働停止やデータ消失につながることがあります。そのため、まずメッセージキューでデータを一時的にキューイングして、データの受付と処理を非同期化することで、システムの処理負荷を平準化することが一般的です。

また、大量発生するストリームデータ(例えば毎秒100万件)を、単体のAmazon EC2インスタンスで処理するのは困難です。そのため、ストリーム処理のロジック(データ加工や異常検知、モニタリングなど)は並列分散処理フレームワークで実装したり、イベント駆動型のアプリケーションとして実装することが多いです。

このようにストリーム処理システムは、メッセージキューを提供するメッセージングサービスと、ストリーム処理サービスの組み合わせで実現することが一般的です。

streaming.png

本投稿では、上記のうちメッセージングサービスについて紹介します。

AWSが提供する主要なメッセージングサービス

AWSでは以下のようなメッセージングサービスを提供しています。

  • Amazon Kinesis Data Streams (KDS)
  • Amazon Managed Streaming for Apache Kafka (MSK)
  • Amazon Simple Queue Service (SQS)
  • Amazon Simple Notification Service (SNS)
  • Amazon MQ

これらサービスの特徴を以下の表に示します。

messaging_services.png

各サービスの仕様は随時更新されるため、最新の情報はAWSの公式ドキュメントをご参照ください。また、AWSではサービスクォータの引き上げを申請することで、制限値の引き上げが可能な場合もあります。

各サービスの概要を以下に示します。

Amazon Kinesis Data Streams (KDS)

KDSは分散メッセージキューのマネージドサービスです。書き込み/読み出し性能をスケールアウトできるため、大量のストリームデータを扱うことができます。また、AWSの様々なサービスと連携することが可能です。対応するストリーム処理サービスには以下のようなものがあります。

  • Kinesis Data Analytics (KDA: SQL/Javaによるストリーム処理が可能)
  • AWS EMR (Spark Streamingによるストリーム処理が可能)
  • AWS Lambda (イベント駆動型の処理が可能)

Amazon Managed Streaming for Apache Kafka (MSK)

MSKはオープンソースであるApache Kafkaのマネージドサービスであり、分散型の高性能なメッセージングプラットフォームです。米国ではFortune 100の80%以上の企業がKafka利用しており、大量のストリーミングデータを扱うメッセージキューのデファクトスタンダードといえます。

機能的にはKDSと似ており、大量のストリーミングデータを扱う場合に使用されます。また、Kafkaを用いた既存システムの移行にも向いています。

Amazon Simple Queue Service (SQS)

SQSはコンポーネント間の送受信を切り離して疎結合化するために使用されます。基本的にチューニング不要のため簡単に使えます。SQSには高性能な標準キューと、メッセージの順番を保証するFIFOキューの2種類があります。また、Lambdaによるイベント駆動処理にも対応しています。

Amazon Simple Notification Service (SNS)

SNSは通知のようにタイミングが重要なメッセージの配信に使用します。チューニング不要で簡単に使えるほか、プッシュ配信が可能なのが特徴です。

Amazon MQ

MQはActive MQまたはRabbit MQと互換性のあるメッセージングサービスであり、業界標準のAPI/プロトコル(MQTT、AMQPなど)を用いた既存システムの移行に向いています。AWSで新規にアプリケーションを構築する場合は他のメッセージキューを推奨します。

単一インスタンス構成または2つのAZ(Availability Zone)におけるアクティブ/スタンバイ構成が可能です。スケールアウトは出来ないため、大量のストリーミングデータを扱うのには向いていません。

AWSにおけるストリーム処理の基本構成

上記の特徴から、ストリーム処理向けのメッセージングサービスにはKDSとMSKが適していると言えます。また、いくつか制限はありますがSQSも活用できそうです。ストリーム処理システムを構成するAWSサービスとその組み合わせを以下の図に示します。

aws_streaming.png

ストリーム処理システムでは、ストリームデータを受信するためのインタフェースを用意する必要があります。外部(IoTデバイスなど)からデータを受信する場合は、セキュリティ確保のためAPI Gatewayを経由することが多いです。内部(業務システムなど)から受信する場合は、各サービスのクライアント(Producer)で直接書き込むことも可能です。

おわりに

本投稿では、AWSが提供する各メッセージングサービスの概要と、ストリームデータを扱う際の選択基準を紹介しました。ストリームデータを扱う際にはKDS、MSK、SQSといったメッセージングサービスがよく活用されています。

次回の投稿では、KDS、MSK、SQSの特徴とアーキテクチャの詳細を紹介します。

18
8
0

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
18
8