标签:
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] |
方法说明:
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] |
方法说明:
Storm系列(十四)架构分析之Executor-输入和输出处理
标签:
原文地址:http://www.cnblogs.com/jianyuan/p/Executor输入和输出处理.html