电子商务网站建设运营/建站开发
在大数据处理框架中,高可用或者说容错性是很重要的。
1、进程级别容错
1)worker挂掉,supervisor会重启它。如果它一直重启失败导致无法发送心跳给nimbus,nimbus就会把它分配到别的机器上
面
2)如果一个机器挂掉了
A、如果上面运行的是worker或者task:nimbus无法接收到worker或者说是task心跳。worker会把他们重新分配到别的机器上
B、如果上面运行的是nimbus或者supervisor:他们是无状态的(所有的状态保存在zookeeper或者磁盘上面),可以自己重启就像没有发生什么事情一样。worker的运行和supervisor没关系,所以对worker没有影响。
3)nimbus和work同时挂掉,如果nimbus没有做高可用,worker就会丢失。在1.0.0之后nimbus支持高可用了
ps:spf就是single point of failure,单点故障
2、ack和fail机制保证消息被处理
请看spout接口
public interface ISpout extends Serializable {void open(Map conf, TopologyContext context, SpoutOutputCollector collector);void close();void nextTuple();void ack(Object msgId);void fail(Object msgId);
}
msgId消息唯一id,在数据库中可以为主键
1)bolt中消息发送成功使用ack;
2)bolt中消息处理失败发送fail。实际使用的时候,需要使用try catch,把fail发送放在catch块里面,把ack发送放在try块的最后
在spout的fail方法里面,需要重新发送消息。