保证消息处理结论:
1、通过acker进行消息保障处理机制
消息从spout发出后,可以对消息进行massid设置,massid和tuple同时保存在acker中
消息处理完成后acker就会消除对此massid的存储若消息处理失败,改消息将会被重新发送;
2、massid设置为时间戳后,真是返回的消息ID却是这样的8070785242661333289=-9191322617433518997,
可见自动会对消息id进行从新改造
3、可以指定acker的数量对使用还是不使用消息保障机制进行设置,acker的数量进行消息保障优化
4、某些进程死亡后消息的处理
由于任务已死,所以未确认元组:在这种情况下,失败元组在树根处的喷嘴元组id将超时并被重播。
Acker任务死了:在这种情况下,acker跟踪的所有喷嘴元组将超时并重播。
喷口任务死亡:在这种情况下,喷口与之交谈的源负责重播消息。例如,当客户端断开连接时,诸如Kestrel和RabbitMQ的队列会将所有待处理的消息放回队列。
5、单tuple铆钉:_collector.emit(tuple, new Values(word));
6、多tuple铆钉:
List anchors = new ArrayList();
anchors.add(tuple1);
anchors.add(tuple2);
_collector.emit(anchors, new Values(1, 2, 3));
故障问题
worker死亡时会发生什么?
worker死亡时,主管将重新启动。如果它在启动时连续失败,并且无法向Nimbus发出心跳信号,则Nimbus将重新安排工作程序的时间。
节点死亡时会发生什么?
分配给该计算机的任务将超时,Nimbus将把这些任务重新分配给其他计算机。
Nimbus或Supervisor守护程序死后会发生什么?
Nimbus和Supervisor守护程序设计为快速故障(遇到任何意外情况时都会自毁)和无状态(所有状态都保存在Zookeeper或磁盘中)。如设置Storm集群中所述,必须使用daemontools或monit之类的工具在Nimbus和Supervisor守护程序的监督下运行。因此,如果Nimbus或Supervisor守护程序死了,它们将重新启动,就像什么都没有发生一样。
最值得注意的是,没有任何工作流程受到Nimbus或主管死亡的影响。这与Hadoop相反,在Hadoop中,如果JobTracker死亡,所有正在运行的作业都会丢失。
Nimbus是单点故障吗?
如果您丢失了Nimbus节点,则工作线程仍将继续运行。此外,主管将在工人死亡后继续重启他们。但是,如果没有Nimbus,则在必要时不会将工作人员重新分配到其他计算机上(例如,如果您丢失了工作计算机)。