JStorm中消息确保处理机制
来源:互联网 发布:lol网络不稳定断开连接 编辑:程序博客网 时间:2024/06/11 08:09
JStorm中消息确保处理机制
从一个spout发射(emit)出去的元祖(tuple),到达下层bolt时候,可能有bolt拆成多个元祖。这样,元祖从spout出发,经过不同下层bolt的处理变成多个元祖,从而形成了一个以spout为根节点的树形结构。
JStorm会创建并且跟踪从spout发射出去的每一个元祖,当跟踪到在这个树形结构中,所有的叶子节点全被标记处理完毕的时候,才会认为树根节点即从sput发射出去的该元祖成功处理。为了让JStrom创建和跟踪元祖树,我们要做以下两件事情:
- 从bolt里发射新元祖时候,确保anchor to input tuples。
outputCollector.emit(tuple, new Values(order)).
tuple要传的参数。
- bolt处理完元祖要通知JStorm。
outputCollector.ack(tuple);
outputCollector.fail(tuple);
确保消息机制的线程问题:(JStorm wiki)
当topology.max.spout.pending 设置不为1时(包括topology.max.spout.pending设置为null),spout内部将额外启动一个线程单独执行ack或fail操作, 从而nextTuple在单独一个线程中执行,因此允许在nextTuple中执行block动作,而原生的storm,nextTuple/ack/fail 都在一个线程中执行,当数据量不大时,nextTuple立即返回,而ack、fail同样也容易没有数据,进而导致CPU 大量空转,白白浪费CPU, 而在JStorm中, nextTuple可以以block方式获取数据,比如从disruptor中或BlockingQueue中获取数据,当没有数据时,直接block住,节省了大量CPU。
但因此带来一个问题, 处理ack/fail 和nextTuple时,必须小心线程安全性。
附属: 当topology.max.spout.pending为1时, 恢复为spout一个线程,即nextTuple/ack/fail 运行在一个线程中。
0 0
- JStorm中消息确保处理机制
- QT中消息处理机制
- Android中异步消息处理机制
- android中异步消息的处理机制
- Android中消息处理机制-Handler剖析
- Android中异步消息处理机制
- Android中异步消息处理机制
- Android中Handler消息处理机制原理
- PetShop中异步消息处理机制
- Android中消息处理机制研究
- iOS中消息机制的处理
- jstorm的acker机制
- 消息处理机制
- windows消息处理机制
- windows消息处理机制
- Android 消息处理机制
- windows消息处理机制
- windows消息处理机制
- 华为OJ 名字漂亮度
- linux设置dhcp中继代理
- Android view利用canvas绘制动画(一)
- 【1】依照Django官网,编写一个web app 创建工程/配置数据库
- Android 开源项目分类汇总
- JStorm中消息确保处理机制
- Spring3.0+Struts2.2+Hibernate3.6整合与常见问题
- 负载均衡方案总结
- Android Studio导入第三方类库的方法
- c中字符串分割函数strtok
- [Elasticsearch] 数据建模 - 处理关联关系(1)
- libevent源代码分析-介绍、安装、使用
- 数据结构 字符串二分查找正确实现
- bzoj 1047