趣味のログ

自分用の作業ログ。。

ストリーム処理を勉強してみた

素人ながら興味があったので少し勉強した。
以下はその際のメモ。

基本的には、↓のqiitaとslideshareを最初のインプットにさせていただいて、自分なりに調べていった。
https://qiita.com/kimutansk/items/60e48ec15e954fa95e1c
https://www.slideshare.net/SotaroKimura/ss-72769963

ストリーム処理の歴史

slideshareより抜粋。
2011年~ Lambdaアーキテクチャ
2013年~ Kappaアーキテクチャ
2015年~ Dataflowモデル

Lambdaアーキテクチャについては、オライリー本が日本語で出ている。

スケーラブルリアルタイムデータ分析入門 ―ラムダアーキテクチャによるビッグデータ処理

スケーラブルリアルタイムデータ分析入門 ―ラムダアーキテクチャによるビッグデータ処理

これは近年ではあまり使われていないのかもしれないが、素人が勉強するには、知っておいて損はない情報が詰まっていると思う。
ツールとしてはApache Stormが使われており、古い感じもするが、Spark streamingやWindow集計についても、(コラム程度だが)既に触れられていた。
日本語情報で体系的に学べる数少ない資料だと思う。

Kappaアーキテクチャについては、正直よく分からない。(日本語の情報が少ない)
公式サイトが存在しており、URLは↓。
http://milinda.pathirage.org/kappa-architecture.com/
「KappaアーキテクチャはLambdaアーキテクチャからバッチ処理を除去したようなもの」と説明されている。
基本的には、Apache Kafkaのような複数サブスクライブができるキューにデータを集約し、ストリーミング処理はキューからデータを取得して実施するらしい。
ストリーム処理システムとしては、Apache Storm、Apache Spark、Kafka Stream、Apache Flinkなどが挙げられている。
Kafkaに集約して、(分散バッチ処理は行わず)ストリーム処理を行う形は、よく見かける気がするけど、もともとはKappaアーキテクチャからきているのだろうか?

また、Flinkがツールとして挙げられているので、後述のDataflowモデルのOSSであるApache Beamと連携させても良いのかもしれない。
slideshareでも、DataflowモデルはLambdaアーキテクチャやKappaアーキテクチャを置き換えるものではないと説明されている)

Dataflowモデルについても、同じ方がqiitaにまとめてくれている。
https://qiita.com/kimutansk/items/d6daca473440462634a0
また、(情報が古いが)Cloud DataflowとApache Sparkとの比較記事も分かりやすいと思う。
https://cloud.google.com/dataflow/blog/dataflow-beam-and-spark-comparison?hl=ja

どちらの記事にもリンクがある、
The World Beyond Batch: Streaming 101
The World Beyond Batch: Streaming 102
や、
VLDB 2015 の Dataflow モデル の論文
の内容が基本的な考え方になっているよう。

Dataflowモデルを使うには、GCPのCloud Dataflowを使うのが一番早いと思う。
コードの実装には、Apache BeamがOSSとして提供されている。
Beamはエンジンとして、別のOSSApache FlinkやApache Apexなどが利用でき、GCPのCloud Dataflowもエンジンとして使える。
そのため、Apache Beamでコードを書けば、GCPでも、オンプレミスでもストリーム処理を行うことができる。
GCPで使うなら、Cloud Dataflow SDKを使う方が、機能が豊富になる。
https://cloud.google.com/dataflow/docs/installing-dataflow-sdk?hl=ja

Apache Beamを使った実装などの例は、情報がある程度多くあり、Window集計についての説明も色々な方がまとめてくれている印象。
実装はバージョンごとに差異もありそうなので、注意が必要そうだが、Raspberry Piのセンサデータを、Apache Beamでストリーム処理するようなことをやってみたいと思う。