Storm系列(十四)架构分析之Executor-输入和输出处理

Executor的数据

mk-executor-data函数用于定义Executor中含有的数据。

Executor的输入处理

根据executor-id从Worker的:executor-receive-queue-map中获得Disruptor Queue 如下:

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函数获取消息处理函数,该消息处理函数会在收到新消息时被调用。

函数原型:

defn mk-task-receive [executor-data tuple-action-fn]

方法说明:

  1. tuple-action-fn为Executor的消息处理函数(Spout与Bolt各不同)。
  2. 若存在消息来源task-id,则调用一次tuple-action-fn函数,若不存在消息来源taks-id,则在该Executor上的所有Task上调用tuple-action-fn函数。
  3. 在创建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*函数来启动用于发送数据的队列线程。

函数原型:

defn start-batch-transfer->worker-handler! [worker executor-data]

方法说明:

  1. 获取worker中的消息发送函数mk-transfer-fn赋值给变量worker-transfer-fn。
  2. 启动Disruptor Queue的消费者线程(disruptor/consume-loop*),batch-transfer-queue为Executor定义的Disruptor Queue对象,disruptor/handler构建EventHandler对象。
  3. Executor的report-error-and-die函数,对错误进行记录并退出进程。
  4. 在创建Executor的过程中,会启动system-threads(mk-executor函数):system-threads[(start-batch-transfer->worker-handler! worker   executor-data)].
  5. 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))

转载于:https://www.cnblogs.com/jianyuan/p/Executor%E8%BE%93%E5%85%A5%E5%92%8C%E8%BE%93%E5%87%BA%E5%A4%84%E7%90%86.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值