其他分享
首页 > 其他分享> > storm--基础面试题2

storm--基础面试题2

作者:互联网

1.提高storm并发度?
并行度就是多线程,主要是调整三个实体
1.worker进程
2.exectors(线程)
3.Task(线程)
在worker下可以可以采用多线程的方式运行程序。task是运行在exector里面的
在这里插入图片描述
worker运行在从节点里面,从节点可以启动多个worker。灰色的是exectors.一个work下多个exector。exector下可以运行一个task也可以运行两个task.task是最小的处理单元。spout和bolt都是运行在task之上。
一个worker进程执行的是一个topo的子集。
一个worker进程会启动1…n个executor线程来执行一个topo的component
一个运行topo就是由集群多台物理机上的多个worker进程组成。
executor是一个被worker进程启动的单独线程,每个executor只会运行一个topo的一个component.
task是spout或者bolt代码的最小执行单元。
ack会占用一个task。
supervisor节点上可以运行多个worker进程,一个进程可以启动多个线程的,所以我们可以在worker多个executor,在executor中运行task。默认情况下task的数目等于executor线程数目,即1个executor线程只运行1个task。
worker --默认是1个
在这里插入图片描述
调整
worker>executor(执行线程)>task
增加worker进程,增加executor 增加task
setNumberworker setnumbertasks 来提高并行度。
2.当Nimbus或Supervisor守护进程死亡时会发生什么?
Nimbus和Supervisor守护进程设计为快速失败(遇到任何意外情况时进程自毁)和无状态(所有状态保存在Zookeeper或磁盘上)
Nimbus或supervisor的死亡不会影响worker流程。这与Hadoop形成鲜明对比,如果JobTracker死亡,所有正在运行的作业都将丢失.
3.Nimbus是单点故障吗?
如果丢失了Nimbus节点,worker仍将继续运行.如果worker死掉,nimbus将继续重新worker。但是,如果没有Nimbus,worker将不会在必要时重新分配给其他计算机(例如,如果您丢失了工作机器)
storm可以配置HA
4.Storm如何保证数据处理?
Storm提供了保证数据处理的机制,即使节点死亡或消息丢失也是如此。
worker死了
nimbus可以启动worker.如果它在启动时连续失败并且无法接受Nimbus的心跳,Nimbus将重新安排worker。
节点死了
分配给该计算机的任务将超时,Nimbus会将这些任务重新分配给其他计算机。
storm的可靠性如何实现,包括spout和bolt两部分?
storm的可靠性由Ispout接口定义三个可靠性api:nexttuple,ack,fail
spout端:
对于tuple树上的每个bolt进行确认应答,spout才会调用ack来表明这个消息被完全处理,如果任何一个bolt处理的tuple报错。调用ack.
ack机制与fail机制
在编写spout的nextTuple时,最终你必须要emit一个Tuple,记住,要这么做:
//发射出去的是数据信息和数据唯一编号。
this.collector.emit(new Values(…), msgID);
一定要有msgID这个参数,一定要有!否则Storm便不会跟踪这个Tuple。
collector.emit(tuple, new Values(…));
而不是:
collector.emit(new Values(…));
为了保证数据能正确的被处理, 对于spout产生的每一个tuple, storm都会进行跟踪, 这里面涉及到ack/fail的处理, 如果一个tuple处理成功, 会调用spout的ack方法, 如果失败, 会调用fail方法. 而在处理tuple的每一个bolt都会通过OutputCollector来告知storm, 当前bolt处理是否成功. 为了了解OutputCollector的ack/fail与Spout的ack/f ail之间的关系, 我调试跟踪了一下storm代码.
bolt的可靠性:bolt也是一样,通过ack和fail机制。
6.storm的如何处理反压机制?
1.storm之前是对于开启ack,可以设置conf.setmaxspoutpending参数设置实现反压效果。当下游bolt跟不上上游的spout发送的tuple时,会停止发送。这个不是很好。
2.最新版本是自动反压机制,监控bolt中的接收队列,当超过高水位时专门的线程把反压信息写入到zookeeper中。zookeeper上watch会通知所有worker进程反压,降低spout发送速度。

标签:面试题,task,ack,基础,spout,worker,bolt,storm
来源: https://blog.csdn.net/u010160949/article/details/99304098