我一直在设计使用风暴的真实引擎。我使用三叉戟拓扑来基本上汇总我们网站上发生的一些活动并将其持久化到cassandra。我正在关注这篇文章“Trident State”,以了解如何在cassandra中保留这些值。我试图通过在cassandra中存储txnId和count来定义事务性spout(不确定它是否实际上是事务性的)。我的输入源是RabbitMq队列。
我们正在每小时更新一次计数,即。一小时内发生的所有活动将被总结并存储为cassandra中的单个条目。我面临的问题是,只要拓扑运行,计数就会正确更新。一旦我重新启动拓扑,最后一小时桶就会被新计数清除。我不确定这是因为txnid再次从1开始。如何解决这个问题。
风暴重启前的Cassandra条目
Key | ts | txnId | count
viewers:country:US | 2013-11-26 08:00:00-0500 | 1 | 6
viewers:country:US | 2013-11-26 09:00:00-0500 | 2 | 3
viewers:country:US | 2013-11-26 10:00:00-0500 | 3 | 11
风暴重启后
viewers:country:US | 2013-11-26 08:00:00-0500 | 1 | 6
viewers:country:US | 2013-11-26 09:00:00-0500 | 2 | 3
viewers:country:US | 2013-11-26 10:00:00-0500 | 1 | 2
事实上,对于第三个条目,我期待它成为11 + 2,因为它们都有同一时间段2013-11-26。此外,txnId重置为1.我应该如何更改设计。
答案 0 :(得分:2)
我基本上是使用Eclipse IDE作为本地群集运行拓扑。由于每次在Eclispe中运行程序时,zookeeper都会被初始化,因此事务ID总是从1开始。当我将它部署到一组机器上时,它工作正常。