2015-09-07 1 views
1

Je fais maintenant une petite recherche pour trouver un moyen de stocker un énorme volume de données (temporairement, jusqu'à ce que certains consommateurs consomment ces messages) de divers «producteurs de messages» (source). Les données proviennent de différentes sources, par exemple HTTP, FTP, SMPP ou de téléchargement de fichiers, chaque type peut avoir des dizaines ou des centaines d'instances créant des messages. Les messages produits par eux peuvent devenir si importants que les consommateurs peuvent être à la traîne en consommant les messages, car les processus peuvent prendre beaucoup de temps ou non. Maintenant, le système utilise RabbitMQ dans certaines parties, mais ses performances diminuent quand un énorme volume de message non consommé augmente (je cherche également à améliorer ses performances, mais c'est différent). Comme alternative, je regarde Apache Kafka qui utilise le disque pour les messages persistants. En lisant de nombreux articles sur Internet, j'ai lu des articles qui parlent de l'Apache Cassandra avec une écriture très rapide, traitant un million d'insertions par seconde et des lectures de volumes similaires. J'ai été étonné, et j'ai essayé de trouver des pistes en utilisant Cassandra pour mon cas, mais sans résultats clairs.Cassandra pour la messagerie

En supposant que j'ai un grand nombre de producteurs de messages, Cassandra (cluster) peut-il gérer les insertions (par lots) de manière plus rapide (débit global élevé) que les producteurs n'accélèrent pas? Je suis sûr que certains d'entre vous auraient pu utiliser Cassandra pour ce genre de cas d'utilisation ou similaire, partager leurs expériences. (Je suis prêt à vous fournir plus d'informations si cela ne suffit pas)

Répondre

2

Oui! Cassandra peut gérer les écritures très efficacement. Mais dans mon expérience, l'utiliser comme un système de messagerie (file d'attente et les goûts) apporte des contraintes techniques à cause de la tombstones.

Cassandra ne supprime pas immédiatement les lignes supprimées et les marque avec un tomstone à récupérer par la suite. Au fil du temps, s'il y a beaucoup de suppressions (par exemple des messages de file d'attente), la performance globale sera pénible, et assez rapidement.

Vous pouvez opter pour Cassandra mais vous devrez implémenter le problème de tomstone (temps seau, plusieurs tables d'état).

À mon humble avis, Apache Kafka est beaucoup plus approprié au cas d'utilisation de la messagerie et peut également être mis à l'échelle massivement.

+1

Bonne réponse. Je pense que définir la valeur gc_grace_seconds à une valeur assez appropriée (maintien des performances et des surcharges gc et stockage supplémentaire causé par les pierres tombales) peut vous aider car Cassandra est conçu pour les insertions lourdes/rapides avec moins de lectures et de suppressions. . Kafka est celui conçu pour de tels cas d'utilisation. –