目前,我正在进行一个项目,在该项目中,我设置了一个跨四台Unix主机的Storm集群。
我意识到Storm是一个“至少一次”的框架。但是,如果我接收到5个事件并将这些事件传递到Esper Bolt进行计数,那么由于某种原因,我在JMS Bolt中接收到5个计数结果(都是相同的值)。
理想情况下,我想接收一个结果输出,有什么方法可以告诉Storm忽略重复的元组吗?
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout(JMS_DATA_SPOUT, new JMSDataSpout(),2).setNumTasks(2);
builder.setBolt("esperBolt", new EsperBolt.Builder().build(),6).setNumTasks(6)
.fieldsGrouping(JMS_DATA_SPOUT,new Fields("eventGrouping"));
builder.setBolt("jmsBolt", new JMSBolt(),2).setNumTasks(2).fieldsGrouping("esperBolt", new Fields("eventName"));
如果您的Esper Bolt没有在其execute()方法的末尾显式ack()每个元组,或者使用iBasicBolt实现,那么它接收到的每个元组最终将在超时后由您的原始JMS Spout重播。
或者,如果您要求bolt“只处理唯一的消息”,请考虑将此处理行为添加到execute()方法中。它可以首先检查本地Guava缓存的元组值的唯一性,然后进行相应的处理。
我读了很多和Storm有关的网站。但我仍然无法将拓扑结构完美地映射到Storm集群中。 请帮助我理解这一点。 在Storm集群中有这样的术语 null null null 所有这些都要用Storm集群来映射。我已经在一个项目里工作了。所以我知道拓扑结构。
我使用的是Storm-kafka-1.1.1-plus和storm 1.1.1。并使用BaseRichBolt、一个KafkaSpout和两个bolts bolt-A、Bolt-B进行配置。元组被锚定在bolt-A中,一旦Bolt-B确认,它将被视为成功处理的元组,并将被提交。但是,问题是由于某种原因,一些失败的消息在KafKaspout中被复制了。 例如: KafkaSpout在处理它时发出了1
一、集群规划 这里搭建一个 3 节点的 Storm 集群:三台主机上均部署 Supervisor 和 LogViewer 服务。同时为了保证高可用,除了在 hadoop001 上部署主 Nimbus 服务外,还在 hadoop002 上部署备用的 Nimbus 服务。Nimbus 服务由 Zookeeper 集群进行协调管理,如果主 Nimbus 不可用,则备用 Nimbus 会成为新的主 Nim
本页概述了启动和运行Storm集群的步骤,如果您使用AWS,您应该查看storm-部署项目.storm-部署 在EC2上完全自动化配置和安装Storm集群. 它还为您设置Ganglia,以便您可以监视CPU,磁盘和网络使用情况. 如果您在运行Strom集群时遇到困难,请首先在 Troubleshooting 页寻求解决. 再者, 查看或者发送邮件列表. 下面是部署Storm集群的步骤总结: 设置
我在跟踪http://jayatiatblogs.blogspot.com/2011/11/storm-installation.html 我的主节点10.0.0.185。我的从节点10.0.0.79,10.0.0.124 下面是我的动物园。我的从属节点的cfg: 下面是我的Storm。我的从属节点的yaml: 下面是暴风雨。我的主节点的yaml: 我在所有从属节点中启动zookeeper,然后在
我试图在同一台机器上运行zookeeper、nimbus和supervisor来模拟storm集群(我知道storm是作为分布式系统设计的,但为了学习,我想模拟单机中的工作方式)。