前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Storm篇】--Storm 容错机制

【Storm篇】--Storm 容错机制

作者头像
LhWorld哥陪你聊算法
发布2018-09-13 14:06:25
1K0
发布2018-09-13 14:06:25
举报

一、前述

Storm容错机制相比其他的大数据组件做的非常不错。

二、具体原因

结合Storm集群架构图:

我们的程序提交流程如下:

其中各个组件的作用如下:

Nimbus 资源调度 任务分配 接收jar包 Supervisor 接收nimbus分配的任务 启动、停止自己管理的worker进程(当前supervisor上worker数量由配置文件设定) Worker 运行具体处理运算组件的进程(每个Worker对应执行一个Topology的子集) worker任务类型,即spout任务、bolt任务两种 启动executor     (executor即worker JVM进程中的一个java线程,一般默认每个executor负责执行一个task任务

Storm 架构设计与Hadoop架构对比:

当程序提交后,storm的本地配置的目录架构书如下:

zookeeper目录树如下:

因为zookeeper存储了程序的运行信息,状态,并监控task的心跳状况。所以当程序提交完后,任务信息都存储在zookeeper里面,即使nimbus宕机,程序依然会继续执行。

三、容错机制

从以下三个方面考虑:

1、集群节点宕机(集群角度) Nimbus服务器 单点故障时可以添加报警,但程序银镜加载到内存中运行了。 非Nimbus服务器 故障时,该节点上所有Task任务都会超时,Nimbus会将这些Task任务重新分配到其他服务器上运行 2、进程挂掉 Worker 挂掉时,Supervisor会重新启动这个进程。如果启动过程中仍然一直失败,并且无法向Nimbus发送心跳,Nimbus会将该Worker重新分配到其他服务器上 Supervisor 无状态(所有的状态信息都存放在Zookeeper中来管理) 快速失败(每当遇到任何异常情况,都会自动毁灭) Nimbus 无状态(所有的状态信息都存放在Zookeeper中来管理) 快速失败(每当遇到任何异常情况,都会自动毁灭) 3、消息的完整性 通过Acker -- 消息完整性的实现机制 保证消息肯定能被处理一次,但不保证会不会重复。因为假设发出的是一个values被切割后其中一个被发送失败了,那么这一组values都得重新发送。 spout发送的时候同时带上message_id,这样这个tuple发送失败后,就能知道哪一个tuplele.

通过消息的亦或状态确保消息是否发送完整。

acker默认为每一个spout,bolt分别启动一个线程。 如下:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档