web-dev-qa-db-fra.com

Redis Streams vs Kafka Streams / NATS

L'équipe Redis présente un nouveau type de données Streams pour Redis 5.0. Étant donné que Streams ressemble à Kafka sujets de la première vue, il semble étrange de trouver des exemples réels pour l'utiliser.

Dans introduction des flux nous avons une comparaison avec Kafka streams:

  1. Gestion des groupes de consommateurs d'exécution. Par exemple, si l'un des trois cosumers échoue définitivement, Redis continuera de servir le premier et le deuxième parce que nous n'aurons plus que deux partitions logiques (consommateurs).
  2. Redis diffuse beaucoup plus rapidement. Ils ont stocké et opéré de mémoire, donc celui-ci est comme c'est le cas.

Nous avons un projet avec Kafka, RabbitMq et NATS. Nous examinons maintenant en profondeur le flux Redis pour essayer de l'utiliser comme "pré kafka cache" et, dans certains cas, comme alternative à Kafka/NATS. Le point le plus critique en ce moment est la réplication:

  1. Stockez toutes les données en mémoire avec la réplication AOF.
  2. Par défaut, la réplication asynchrone ne garantit pas que les commandes XADD ou les changements d'état des groupes de consommateurs sont répliqués: après un basculement, quelque chose peut manquer en fonction de la capacité des esclaves à recevoir les données du maître. Celui-ci ressemble à un point pour tuer tout intérêt à essayer des flux à forte charge.
  3. Le processus de basculement Redis tel qu'exploité par Sentinel ou Redis Cluster n'effectue une vérification au mieux que pour le basculement vers l'esclave qui est le plus à jour, et sous certaines défaillances spécifiques, il peut favoriser un esclave qui manque de certaines données.

Et la stratégie de plafonnement. La véritable "ressource plafonnée" avec Redis Streams est la mémoire, donc ce n'est pas vraiment si important le nombre d'éléments que vous souhaitez stocker ou la stratégie plafonnée que vous utilisez. Ainsi, chaque fois que votre consommateur échoue, vous obtiendrez une compression de mémoire maximale ou un message perdu avec un plafond.

Nous utilisons Kafka comme frontal de soumissionnaire RTB qui gère ~ 1 100 000 messages par seconde avec une charge utile de ~ 120 octets. Avec Redis, nous avons une consommation de mémoire de ~ 170 Mo/s en écriture et avec 512 Go RAM serveur, nous avons écrit "réserve" pour ~ 50 minutes de données. Donc, si le système de traitement était hors ligne pendant ce temps, nous plantions.

Pourriez-vous s'il vous plaît en dire plus sur l'utilisation de Redis Streams dans le monde réel et dans certains cas, vous pouvez essayer de l'utiliser lui-même? Ou peut-être que les flux Redis pourraient être utilisés avec une quantité de données non importante?

12
misterion

ça fait longtemps. Cela ressemble à une discussion qui appartient à la liste de diffusion redis-db, mais le cas d'utilisation semble fascinant.

Notez que les flux Redis ne sont pas destinés à être un remplacement Kafka - ils offrent des propriétés et des capacités différentes malgré les similitudes. Vous avez bien sûr raison en ce qui concerne la nature asynchrone de la réplication. quantité de RAM disponible, vous devriez envisager d'utiliser un cluster et de partitionner vos flux sur des noms de clé basés sur des périodes.

4
Itamar Haber