Amazon KinesisとApache Kafkaの類似点/相違点まとめ
こんにちは。
Amazon Kinesisについて調べたり実装してみたりしたため、
モデルがよく似たApache Kafkaとの類似点や相違点が気になってきました。
というわけで、実際比べてみた結果どうだったのかをまとめてみます。
1.2つのプロダクトの類似点
Amazon KinesisとApache Kafkaの大きな類似点として、以下があります。
- 1.メッセージを取得したタイミングで削除するのではなく、一定期間経過後に削除するモデルを取っている
- 2.メッセージの生産者(Producer)、メッセージの消費者(Consumer)は複数存在できる
- 1の性質が存在するため、メッセージは複数の消費者から取得可能となる。
- 取得後削除するモデルの場合、他の消費者が取得&応答待ちのメッセージの扱いなどで問題となるが、1のモデルのため問題ない。
- 1の性質が存在するため、メッセージは複数の消費者から取得可能となる。
- 3.「どこまでメッセージを読んだか?」はメッセージの消費者側で管理する
尚、各々の基本構成図は以下です。
Amazon Kinesisがクラスタ部分がクラウドによって隠蔽されて単純化していること以外は同じ構成になっています。
Apache Kafka
この手のプロダクトを言い表す場合、「メッセージキュー」という表現くらいしか広く通じる言葉がないのですが、
実際の所この2プロダクトは「メッセージキュー」という表現にはいまいち合いません。
「PubSub型のPersistentメッセージバス」という表現が個人的には一番あっていると思いますが・・・
どなたか、いい言葉があれば教えてください^^;
2.2つのプロダクトの相違点
次は2つのプロダクトの相違点です。
Amazon KinesisとApache Kafkaの大きな相違点は、当たり前な話ではあるのですが、以下です。
Apache Kafkaはあくまでローカルのクラスタ群に構築した分散システムであるのに対し、
Amazon Kinesisはクラウド上で提供されるSaaSです。
そのため、内部構成を気にすることなく後付けでスケールが可能である上に、障害も単純化されて種類に応じて対応すればいい、となります。
・・なんか、当たり前といえば当たり前な結果になりましたが、比較結果はこんな感じです。
3.細かい相違点
後は、以下のように細かい相違点は下記のようにそれなりにあるため、
もし両方に対応する必要が出てきた場合は下記のように考えておけばいいかと。
- 「どこまでメッセージを読んだか?」は利用者側が管理する必要があるが、KinesisとKafkaは以下のようにデフォルトの動作が違う。
- KinesisとKafkaでは既存のStream(Topic)にShard(Partition)を追加/削除する場合は下記のようになる。
とりあえずわかりやすい違いとしてはこれくらいでしょうか。
またもし更に詳細なことがわかった場合は再度まとめますね。