Pravegaとは

2 min read読了の目安(約1800字

Pravega

https://pravega.io/

Streamデータを扱う基盤といえば、AWSで言えばKinesisだろうし、OSSで言えば Apache Kafka や Apache Pulsar が有名だろう。Pravegaはそんなプロダクトの対抗馬として最近(といっても2017年頃?)出てきたものの様子。少し調べてみた。気が向いたら更新するかも。

TL;DR

  • CNCF に寄贈された Stream Storage ソフトウェア
  • Apache Kafka や Apache Pulsar を意識して作られている様子
  • Java 製
  • 背後にはDELL Technologyがいるっぽい?

Overview

基本的には一次情報(公式HP)など見てください。以下は、筆者の私見がつぶやきとして記載されています。

Why Pravega

KafkaやPulsarでは難しかった、以下のなどができるらしい

  • Auto Scaling
  • Ingestion of large data such as video
  • Efficient at high partition counts

ホンマか?例えばAuto Scalingは、Kafkaだとローカルにデータ持っちゃうからエラスティックにできないよねって主張ならわかるけど、PulsarだとBookKeeper使うからそのあたりは解決したのではなかったっけ?具体的にどういう課題を解決したのだろう。

Videoとかって、一つのメッセージとしていれるってことだろうか。謎。
High Partition Countsでも効率的ってのは嬉しい。

architecture

Pravega Arch v3

これだけ見てわかったことといえば、

  • APIがいっぱいある。Key Value APIとかByte APIとかなんだろう
  • Controller 層と Segment Store 層 で役割が分かれている?

調査

Concepts

  • Stream が Kafka でいう Topic に当たる様子
  • Scope という概念があり、 Stream ごとの Namespace を表現する様子。Kafka ではこの概念がなかった。Pulsar ではあった気がする。
  • Stream は Stream Segments という概念で分かれる。これは Kafka でいう Partition だろうか
  • Events が Kafka でいう Message に当たる様子
  • WriterとReaderという概念がある。それぞれProducerとConsumerかな

Elastic Streams: Auto Scaling

Pravegaのユニークな特徴の一つ。I/O load に応じて、ElasticにStreamをgrowしたりshrinkできる。

例えば、Segment 0, 1 がある状態で、データの書き込みが多くなった場合、Segment 1 を Segment 2, 3に分割する。その際、 Segment 1 は Sealed され、その後の書き込みは止まる。Sealed でない Active な Segment にのみ書き込みは継続される。

Ingestion rate に応じて、 Routing Key の剰余を元にした Stream Segment を勝手に割り振る・・・みたいだけど、どうやって Writer は どの Stream Segment に書くべきかを判断するのだ? (これは推測だが、Sealed されると書き込みエラーになりそのレスポンスに今後はどのSegmentに書くべきかの情報が入っている??)

Architecture

CoordinationにはZookeeperを使っている。Tiered Storageになっており、Tier1にはBookkeepr、Tier2にはHDFSとかが使える。

まとめというか感想

KafkaというよりPulsarに近いっぽい。というかほとんどPulsarでは?どのへんに新規性があるのだろう