web-dev-qa-db-ja.com

なぜApache Kafka StreamsはRocksDBを使用し、それをどのように変更できるのか?

Apache Kafka 0.9および0.10の新機能の調査中に、KStreamsおよびKTablesを使用しました。興味深い事実があります。Kafkaは内部的にRocksDBを使用します。 Introducing Kafka Streams:Stream Processing Made Simple 。RocksDBはJVN互換言語で記述されていないため、追加の共有ライブラリ(OS依存)。

そして、ここに簡単な質問があります:

  • なぜApache Kafka= StreamsはRocksDBを使用するのですか?
  • どのように変更できますか?

私は答えを検索しようとしましたが、RocksDBが1秒あたり約数百万回の操作の範囲で非常に高速であるという暗黙の理由しかわかりません。

一方、JavaでコーディングされたDBがいくつかあり、JNIを経由しないのと同様に、おそらくエンドツーエンドで実行できます。

RocksDBは、いくつかの(内部的な)理由で使用されています(たとえば、そのパフォーマンスについて既に説明したとおり)。概念的に、Kafka StreamsはRocksDBを必要としません。これは内部キー値キャッシュとして使用され、同様の機能を提供する他のストアでも機能します。

以下の@migunoからのコメント(言い換え):

純粋なインメモリキーバリューストアとは対照的なRocksDBの重要な利点の1つは、ディスクへの書き込み機能です。したがって、利用可能なメインメモリよりも大きい状態は、Kafka= Streamsによってサポートされます。

上記の@migunoからのコメント:

参考:"RocksDB is not written in JVN compatible language, so it needs careful handling of the deployment, as it needs extra shared library (OS dependent)." Kafka Streamsのユーザーとして、何もインストールする必要はありません。

Kafka Streams DSLを使用すると、0.10.2リリース( KAFKA-3825 )で、カスタム状態ストアをプラグインできます。別のキーと値のストアを使用します。

Kafka Streams Processor APIを使用すると、StateStoreインターフェイス経由で独自のストアを実装し、トポロジ内のプロセッサノードに接続できます。

20
Matthias J. Sax