2017-06-19 2 views
0

Ainsi, Apache Storm + Trident fournit la sémantique exacte. Imaginez que j'ai la topologie suivante:Garantie unique dans Storm Trident dans les scénarios de partitionnement et/ou de panne réseau

TridentSpout -> SumMoneyBolt -> SaveMoneyBolt -> Persistent Storage. 

CalculateMoneyBolt valeurs monétaires dans leur montant mémoire, puis transmet le résultat à SaveMoneyBolt qui devrait enregistrer la valeur finale à un stockage distant/base de données.

Maintenant, il est très important de calculer ces valeurs et de ne les stocker qu'une seule fois dans la base de données. Nous ne voulons pas accidentellement compter deux fois l'argent. Comment Storm with Trident gère-t-il les scénarios de partitionnement et/ou de défaillance réseau lorsque la demande d'écriture dans la base de données a été envoyée, la base de données a correctement reçu la requête, enregistré la transaction et, tout en répondant au client, SaveMoneyBolt est mort ou partitionné du réseau avant d'avoir reçu la réponse de la base de données?

Je suppose que si SaveMoneyBolt était mort, Trident réessayerait le lot, mais nous ne pouvons pas nous permettre un double comptage.

Comment ces scénarios sont-ils gérés?

Merci.

Répondre

1

Trident donne un identifiant de transaction unique pour chaque lot. Si un lot est réessayé, il aura le même txid. Les mises à jour par lots sont également commandées, c'est-à-dire que la mise à jour d'état pour un lot ne se produira pas avant la fin de la mise à jour pour le lot précédent. Donc, en stockant le txid avec les valeurs dans l'état, trident peut dédoublonner les mises à jour et fournir exactement une fois la sémantique.

Trident est livré avec quelques implémentations d'état de carte intégrées qui traitent tout cela automatiquement.

Pour plus d'informations consultez la documentation: