参考:http://blog.itpub.net/29754888/viewspace-1260026/ ===== 角色简介 ===== topologies * 相当于一个 job。一直运行,直到手动kill Nimbus * 相当于master node,master node上运行一个Nimbus进程,nimbus负责分发代码到急群中,分配任务到每台机器,监控任务失败 Supervisor * 相当于worker node,每个worker node 会运行一个后台进程叫Supervisor,Supervisor监听Nimbus的请求,负责分配本机的资源,启动、关闭worker进程。 Worker(集群间调度的最小单位) * 每个worker进程执行一个topology拓扑的一个子集,所以一个topology包含了多个worker进程,这些进程分布在集群的每一台机器上 * 一个worker进程只属于一个topology拓扑 * 每个worker进程可以执行一个或多个executor executor * 一个executor是worker进程的一个线程, * 一个executor负责一个component(spout or bolt)中的一个或多个task task * task是处理逻辑的最小单位 * 每个component的task个数在整个生命周期中是固定的 Streams * Streams是一系列的tuples,最基本的基于Streams的组件是"spouts" and "bolts" {{:pasted:20151124-133257.png}} Nimbus和Supervisor之间的协作都是通过zookeeper完成的,Nimbus和Supervisor都是fail-fast和无状态的,所有的状态都保存在zookeeper。也就是说我们可以kill -9 Nimbus 或者 Supervisors,然后重启,都没有什么问题 ===== 失败策略 ===== worker dies? * 如果worker挂了,supervisor会重启worker进程,如果连续启动都失败了,Nimbus会在其他机器重新分配一个worker node dies? * 所有分配到这台机器的task都会超时,然后Nimbus回重新分配这些任务到其他机器 Nimbus or Supervisor daemons die? * Nimbus and Supervisor daemons 被设计成fail-fast (进程自毁,当未意料的情况发生时p) 和 无状态的 (所有的状态都保存在zookeeper,zookeeper会持久化到磁盘). 因此,重启即可,所有的worker进程都不会受到影响 所有Nimbus都挂了 * worker会继续运行,supervisor继续管理worker进程(失败重启之类的操作)。只是涉及到Nimbus的操作全都不能做(比如重新分配worker)