web-dev-qa-db-fra.com

Pourquoi Apache Kafka Streams utilise RocksDB et si comment est-il possible de le changer?

Lors d'une enquête sur les nouvelles fonctionnalités d'Apache Kafka 0.9 et 0.10, nous avions utilisé KStreams et KTables. Il est intéressant de noter que Kafka utilise RocksDB en interne. Voir - Présentation de Kafka Streams: Stream Processing Made Simple . RocksDB n'est pas écrit dans un langage compatible JVN, il a donc besoin d'une gestion soigneuse du déploiement, car il a besoin d'une bibliothèque partagée supplémentaire (OS) dépendant).

Et ici, il y a des questions simples:

  • Pourquoi Apache Kafka Streams utilise RocksDB?
  • Comment est-il possible de le changer?

J'avais essayé de chercher la réponse, mais je ne vois qu'une raison implicite, que RocksDB est très rapide pour des opérations de l'ordre de millions d'opérations par seconde.

D'un autre côté, je vois certaines bases de données codées en Java et peut-être de bout en bout, elles pourraient le faire aussi bien qu'elles ne passent pas par JNI.

RocksDB est utilisé pour plusieurs raisons (internes) (comme vous l'avez déjà mentionné par exemple ses performances). Conceptuellement, Kafka Streams n'a pas besoin de RocksDB - il est utilisé comme cache de valeur-clé interne et tout autre magasin offrant des fonctionnalités similaires fonctionnerait également.

Commentaire de @miguno ci-dessous (reformulé):

Un avantage important de RocksDB par rapport aux magasins de valeurs-clés en mémoire pure est sa capacité à écrire sur le disque. Ainsi, un état plus grand que la mémoire principale disponible peut être pris en charge par Kafka Streams.

Commentaire de @miguno ci-dessus:

FYI: "RocksDB is not written in JVN compatible language, so it needs careful handling of the deployment, as it needs extra shared library (OS dependent)." En tant qu'utilisateur de Kafka Streams vous n'avez pas besoin d'installer quoi que ce soit.

En utilisant Kafka Streams DSL , depuis la version 0.10.2 ( KAFKA-3825 ), il est possible de brancher des magasins d'état personnalisés et pour utiliser un magasin de valeurs-clés différent.

En utilisant l'API Kafka Streams Processor , vous pouvez implémenter votre propre magasin via l'interface StateStore et le connecter à un nœud de processeur dans votre topologie.

20
Matthias J. Sax