ビッグデータの分析、機械学習をするにあたり、「ストリーム処理」という言葉を耳にし、以下の疑問が生まれました。
- ストリーム処理とはなんなのか?
- バッチ処理と何が違うのか?
- どうやって実装するのか
そこで今回はストリーム処理について説明したいと思います。
なお、ビッグデータの分析に関する全体の流れは以下の記事にまとめているため、合わせてご覧ください。
ストリーム処理とは
ストリーム処理とは、ストリーミングデータ(時間の経過とともに無限に流れてくるデータ)を処理することです。バッチ処理と比較してリアルタイム性を重視します。
ストリーミングデータの特徴
ストリーミングデータ(イベントストリーム、データストリームとも呼ばれる)の特徴は以下の3つです。
- 順序付けされている
- イミュータブル(変更不可能)なデータレコード
- 再生可能 ※必須ではない
順序付けされている
イベント(ストリーミングデータの各データ)には順序があり、順序を重要視するシステムで利用します。
例えば、イベント1「給料 20 万円の振り込み」、イベント2「5 万円の引き出し」には順序があります。残高 0 円の口座の場合、イベント1が先です。逆は残高不足で引き下ろせないのでありえません。
イミュータブル(変更不可能)なデータレコード
イベントは1度発生すると削除、変更できません。
例えば、イベント「5 万円の引き出し」を後から削除、変更することはできません。このイベントをキャンセルするには、新しいイベント「5 万円を預け入れ」を実行する必要があります。
再生可能 ※必須ではない
順序付けされていて、イミュータブルなデータレコードのため、ストリーミングデータは再現可能です。
以下のようなイベントが発生した場合、現在の残高を求めることはもちろん、ある時点での残高を求めることも可能です。
イベント0「残高 0 円で口座開設」
イベント1「5 万円を預け入れ」
イベント2「10 万円を預け入れ」
イベント3「5 万円の引き出し」
イベント4「5 万円を預け入れ」
イベント5「10 万円の引き出し」
例えばイベント3終了時点では、残高が 10 万円であることがわかります。このようにイベントリストから過去のある状態のデータを再現することをマテリアライズと言います。
ストリーム処理 VS バッチ処理
ストリーム処理とバッチ処理の違いは時間軸の違いです。
ストリーム処理はリアルタイム性を重視し、バッチ処理はリアルタイム性を重視しません(スループットを重視します)。
※ストリーミングデータに特性には時間は関係ありません。
バッチ処理
バッチ処理はデータを一括で処理することでスループットを重視します。(例えば、データを都度送信する場合は1つのデータに1つのヘッダが付与されますが、一括でデータを送るとヘッダが1つで済みます。)
例えば、店舗売上の日次処理や、夜中のメンテナンスなどがバッチ処理に含まれ、通常はリアルタイム性を求められません。
ストリーム処理
ストリーム処理はストリーミングデータが発生する度にデータを処理することでリアルタイム性を重視します。
リアルタイム性が重視される例としては以下のとおりです。
- クレジットカードの不正検出(翌日や1ヶ月後に検出では遅すぎます。すぐに利用を停止したいです)
- リアルタイム広告(ユーザーがWebサイトを離れてしまった後に最適な広告を決定するのでは遅すぎます)
- 運送状況の確認(IoTデバイスが翌日に通過した位置情報を送信しても、既にそこ宅配物はありません。)
分散ストリーミングプラットフォームとは
ストリーム処理は、分散ストリーミングプラットフォーム上で実施されることが多いです。
分散ストリーミングプラットフォームは明確な定義はありませんが、一般的には以下の2つから構成されるシステムと言われています。
- 分散データストリームのソース(Publish/Subscribe メッセージングシステム)
- 分散ストリーム処理
分散データストリームのソースを実現する OSS やサービス
主に以下のソフトウェアやサービスが分散データストリームのソースを提供します。
- Apache Kafka
- Amazon Kinesis Data Streams
分散データストリームのソースとして Apache Kafka を利用する場合は以下の記事をご覧ください。
分散ストリーム処理を実現する OSS やサービス
主に以下のソフトウェアやサービスが分散ストリーム処理を提供します。
- Kafka Streams(Apache Kafka の Streams API)
- Kinesis Data Analytics
- Apache Flink
- Apache Spark Streaming
- Apache Storm
- Apache Samza
分散ストリーミングプラットフォームを企業で利用した例
分散ストリーミングプラットフォーム(Apache Kafka + Kafka Streams)を企業で使用した例を載せます。
- LINE社: 大規模Kafkaプラットフォームの裏側
- Disney+ Hotstar社: Explosive Growth with Real-Time Event Streaming on Confluent Platform
- Cerner社: 大手ヘルスケアIT企業 Cerner社のKafka活用事例
- Bosch社: Tools Streams IoT Data with Confluent Cloud
コメント