Storm系列(十四)架构分析之Executor-输入和输出处理
Executor的数据
mk-executor-data函数用于定义Executor中含有的数据。
Executor的输入处理
根据executor-id从Worker的:executor-receive-queue-map中获得Disruptor Queue 如下:
| 1 | receive-queue ((:executor-receive-queue-map worker) executor-id) |
说明:
Worker的接收线程从ZMQ收到数据后,线程会根据目标的Task Id找到对应的Executor,并将数据发送到该Executor所对应的接收DisruptorQueue中,对于DisruptorQueue中的消息Bolt会调用executor方法处理,而Spout类型的Executor则调用Ack或Fail处理。
mk-task-receive函数定义了一个函数来处理DisruptorQueue中的消息,通过调用disruptor/clojure-handler函数获取消息处理函数,该消息处理函数会在收到新消息时被调用。
函数原型:
| 1 | defn mk-task-receive [executor-data tuple-action-fn] |
方法说明:
- tuple-action-fn为Executor的消息处理函数(Spout与Bolt各不同)。
- 若存在消息来源task-id,则调用一次tuple-action-fn函数,若不存在消息来源taks-id,则在该Executor上的所有Task上调用tuple-action-fn函数。
- 在创建Spout或Bolt时,会调用mk-task-receiver函数并将结果存储于event-handler变量中:
event-handler(mk-task-receiver executor-data tuple-action-fn)
在Spout中以非阻塞方式接收数据:
(disruptor/consume-batch receive-queue event-handler)
在Bolt中以阻塞方式接收数据:
(disruptor/consume-when-available receive-queue event-handler)
Executor的输出及发送
每个Executor都会有一个输出的Disruptor Queue对象,Executor在发送消息时首先会将消息发送到该队列,Executor会启动一个发送线程来处理该队列中的数据,该线程调用Worker中的mk-transfer-fn产生的函数对数据进行处理,或者把数据通过ZMQ发送(mk-transfer-tuples-handler)到其它Worker,或者直接发送到与该Worker上的其它Executor相对应的接收Disruptor Queue中。
Start-batch-transfer->worker-handler!函数调用disruptor/consume-loop*函数来启动用于发送数据的队列线程。
函数原型:
| 1 | defn start-batch-transfer->worker-handler! [worker executor-data] |
方法说明:
- 获取worker中的消息发送函数mk-transfer-fn赋值给变量worker-transfer-fn。
- 启动Disruptor Queue的消费者线程(disruptor/consume-loop*),batch-transfer-queue为Executor定义的Disruptor Queue对象,disruptor/handler构建EventHandler对象。
- Executor的report-error-and-die函数,对错误进行记录并退出进程。
- 在创建Executor的过程中,会启动system-threads(mk-executor函数):system-threads[(start-batch-transfer->worker-handler! worker executor-data)].
- Executor在创建其数据时会创建发送队列,发送队列的创建过程:
Batch-transfer->worker (disruptor/disruptor-queue
(storm-conf TOPOLOGY-EXECUTOR-SEND-BUFFER-SIZE)
:claim-strategy :single-threaded
:wait-strategy (storm-conf TOPOLOGY-DISRUPTOR-WAIT-STRATEGY))
Storm系列(十四)架构分析之Executor-输入和输出处理的更多相关文章
- Storm系列(十六)架构分析之Executor-Bolt
准备消息循环的数据 函数原型: 1 let[executor-sampler (mk-stats-sampler (:storm-conf executor-data))] 主要功能: 定义tupl ...
- Storm系列(十五)架构分析之Executor-Spout
Spout实现mk-threads接口用于创建与Executor对应的消息循环主函数. defmulti mk-threads executor-selector Mk-threads函数的主消息循环 ...
- Storm系列(十二)架构分析之Worker-心跳信息处理
Worker通过worker-data方法定义了一个包含很多共享数据的映射集合,Worker中很多方法都依赖它 mk-worker 功能: 创建对应的计时器.Executor.接收线程接收消息 方 ...
- struts2官方 中文教程 系列十四:主题Theme
介绍 当您使用一个Struts 2标签时,例如 <s:select ..../> 在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...
- 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》
由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...
- MP实战系列(十四)之分页使用
MyBatis Plus的分页,有插件式的,也有其自带了,插件需要配置,说麻烦也不是特别麻烦,不过觉得现有的MyBatis Plus足以解决,就懒得配置插件了. MyBatis Plus的资料不算是太 ...
- ES系列十四、ES聚合分析(聚合分析简介、指标聚合、桶聚合)
一.聚合分析简介 1. ES聚合分析是什么? 聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值.最小值,计算和.平均值等.ES作为 ...
- Docker系列(十四):Kubernetes API和源码分析
Kubernetes API入门 Ku8 eye开源项目
随机推荐
- 【配置文件节点】java世界配置文件节点
Spring <context:property-placeholder/> 期望:能不能有一种解决方案可以方便我们在一个阶段内不需要频繁书写一个参数的值,而在不同阶段间又可以方便的切换参 ...
- 开发设计模式(五)单例模式(Singleton Pattern)
http://blog.sina.com.cn/s/blog_89d90b7c0101805m.html 单例模式:意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提 ...
- 一步步学习ASP.NET MVC3 (12)——FileResult
请注明转载地址:http://www.cnblogs.com/arhat 忙了两天,本来老魏昨天就应该写出新的文章,但是由于昨天雨夹雪而且加上昨天晚上加了班,到家都没饭吃了,一看时间都9点了,什么饭店 ...
- javascript高级编程笔记02(基本概念)
ParseInt()函数: 由于Number函数在转换字符串时比较复杂而且不合理,我们常常转换字符串都用parseInt函数, Parseint函数规则: 忽略字符串前面的空格,直到找到第一个非空格字 ...
- 条件编译用法(#ifndef #define #endif#else)
1. 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题 ...
- php-- 避免表单的重复提交
用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. 1.使用客户端脚本 提 ...
- 【NOIP 2012 疫情控制】***
题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都, 也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散 ...
- 两个表,一个表中的两列关联另一个表的id,如何将这个表中的两列显示为另一个表id对应的内容
表A name user owner machine1 1 2 machine2 3 4 表B userid username 1 aaa 2 bbb 3 ccc 4 ddd 以上两个表,表A 设备的 ...
- ASP.NET 弹出对话框和页面之间传递值的经验总结
今天碰到一个弹出对话框(PopUp dialog)的问题, 因该是个傻瓜问题, 但是还是让我研究了半天, 总结了一些前人经验, 拿出来跟大家分享一下! 在ASP.Net中页面之间的传值方法有很多,但是 ...
- SPRING IN ACTION 第4版笔记-第七章Advanced Spring MVC-006- 如何保持重定向的request数据(用model、占位符、RedirectAttributes、model.addFlashAttribute("spitter", spitter);)
一.redirect为什么会丢数据? when a handler method completes, any model data specified in the method is copied ...