zoukankan      html  css  js  c++  java
  • Storm系列(十二)架构分析之Worker-心跳信息处理

    Worker通过worker-data方法定义了一个包含很多共享数据的映射集合,Worker中很多方法都依赖它

    mk-worker

    功能:

    创建对应的计时器、Executor、接收线程接收消息

    方法原型:

    (defserverfn mk-worker [conf shared-mq-context storm-id assignment-id port worker-id])

    Worker内部数据处理流程图:

    image

    Worker心跳

    功能:

    该心态信息被写入到本地文件系统,Supervisor读取这些心跳信息来判断Worker状态,然后决定是否重启Worker.

    实现代码:

    (defn do-heartbeat [worker])
        (let [conf (:conf worker)
    hb (WorkerHearbeat.
    (current-time-secs)
    (:storm-id worker)
    (:executors worker)
    (:port worker))]
    (.put (worker-state conf (:worker-id worker))
    LS_WORKER_HEARTBEAT
    10  hb)))

    代码说明:

    1. Worker心跳信息主要包括current-time-sec(当前时间),storm-id(topologyId),executors(Worker中包含的Executor列表),port(Worker对应的端口).
    2. 通过worker-state创建的LocalState对象,将hb心跳信息保存到STORM-LOCAL-DIR/workers/<workerId>/heartbeats(LS-WORKER_HEARTBEAT)本地文件夹中.

    发送Worker心跳信息

    功能:

    Woker的心跳信息使用heartbeat-timer计时器进行持续发送,发送间隔默认为1秒(WORKER-HEARTBEAT-FREQUENCY-SECS)

    调用方式:

    _(schedule-recurring (:hearbeat-timer worker) 0 (conf WORKER-HEARTBEAT-FREQUENCY-SECS) heartbeat-fn)

    Executor心跳

    功能:

    Worker心跳信息保存到本地文件夹,Executor心态保存到zookeeper中。

    do-executor-hearbeats函数用来发送一次心跳。

    方法原型:

    (defnk do-executor-heartbeats [worker :executors nil])

    代码说明:

    1. 通过executor/render-stats方法获取Executor的运行统计信息。
    2. Executor心跳信息包括:topologyId、executor-stats(Worker中Executor的运行统计)、uptime(Worker的启动时间)、time-secs(当前时间).
    3. 调用storm-cluster-state的worker-hearbeat!方法存储心跳信息,在Zookeeper中存储路径为/storm/workerbeats/<storm-id>/<node-port>.

    发送Executor心跳信息

    功能:

    Worker使用:executor-hearbeat-timer计时器线程来发送Executor心跳信息,默认三秒钟发送一次。

    发送过程:

    _(schedule-recurring (:executor-heartbeat-timer worker) 0 (conf TASK_HEARBEAT-FREQUENCY-SECS) #(do-executor-hearbeats worker :executors @executors))
  • 相关阅读:
    std::string构造函数
    shell命令-while语句
    shell命令-for语句
    shell命令-if语句
    softmax回归推导
    sigmod函数求导
    生成器面试题之一
    range和xrange的区别
    python里的input
    python中print和input的底层实现
  • 原文地址:https://www.cnblogs.com/jianyuan/p/4858795.html
Copyright © 2011-2022 走看看