ストリーミング処理がたくさんあって困る話


雑記

近年、「オープンソース×ストリーミング処理」の実装が多くでてきているように思う。少し思いつくだけで以下があげられる。

  • Storm
  • Samza
  • Spark Streaming
  • Flink
  • Apex
  • Kafka Streams

この潮流の源泉はなにかと考えると、BigDataやIoTなどのコンテキストでのニーズの高まりだけでなく、Hadoopを筆頭とする分散処理基盤が成熟しつつあるというのもあるんじゃなかろうか。

これらのプロダクトの目指す方向性は、大体一緒で、以下のキーワードが付随することが多い。

  • at least onceなセマンティクス
  • 分散処理 (主にHadoop/YARN上で動作する)
  • 耐障害性
  • ステートフルな処理 (Window処理)
  • (ある程度の)順序性の担保
  • 機械学習

たくさん実装されていると比較したがるのが人の性というもので、探してみるとSamzaの公式ドキュメント(http://samza.apache.org/learn/documentation/0.10/comparisons/introduction.html) がマトモな軸でプロダクトの比較をしているように思われる。比較軸はDurability/Ordering/StateManagement/Parallelism/Bufferingなどが挙げられている。日本語のドキュメントでは、前日のKafka Meetup#1 で話されていた @kimutansk の資料がよくまとまっていているように感じた。 http://kafka-apache-jp.connpass.com/event/32293/presentation/

私が知る限り(というかSpark StreamingとKafka Streamsくらいしかまともに触っていないが・・)、大体以下のようなハードルがあるように感じる。

  • プログラミングの前に抽象化された概念(KTable とかDStreamとか)を理解しなければいけない
  • 基盤の特徴を理解したうえでの実装が必要(例: Idemponentにして exactly onceを実現する)
  • 基盤側の都合もプログラムでケアしなければならない(チェックポイントとか)

日本のSI業界ではなかなかそんな人材いないよね、と純粋に思うわけである。身近にいたら重宝するレベル。まあSIベンダに期待しないで自社で人材を育てなさいってコトでよろしく。

たくさんあるプロダクトで一番おすすめはと考えてみると、大体こういうのは「後発で」、「データソースとの連携性が高く」、「安定した開発体制」を鑑みて

Kafka Streams

がいいんじゃないかなと判断した。おっと、LinkedIn はMicrosoftが買収したというニュースがあったなぁ。大丈夫かなぁ・・・とやっぱり心配になってきたw

そんなことを思う梅雨の夜