Giter Site home page Giter Site logo

kent7306 / akkaflow Goto Github PK

View Code? Open in Web Editor NEW
109.0 14.0 46.0 207.17 MB

akkaflow是一个基于akka架构上构建的分布式高可用DAG工作流调度工具,可以把子节点分配在集群机器上并行执行,高效利用集群资源。

Scala 87.78% Shell 6.94% Java 3.80% TSQL 1.49%

akkaflow's Introduction

akkaflow

简介

akkaflow是一个基于akka架构上构建的分布式高可用ETL工作流调度工具,可以把任务分发在集群中不同的节点上并行执行,高效利用集群资源,支持时间周期及任务动态调度,提供多种运行节点。目前工作流由xml文件定义,并且提供一套完整的基于Shell的操作命令集,相对简洁,可作为构建数据仓库、或数据平台上的调度工具。
用户提交工作流,条件满足后触发生成实例,系统运行产生的元数据将被记录并提供用户查看与进一步操作,其中

  • 简单的前端操作页面详见演示地址,演示账号密码分别为admin/123,配置为(3台公网机器,1内核,1G内存)
  • 工作流定义文档详见这里
  • 使用示例文档点击这里

整个akkaflow架构目前包含有四个节点角色:Master、Master-Standby、Worker、Http-Server,每个角色可以独立部署于不同机器上,支持高可用。

节点角色关系图

  • Master 活动主节点,调度触发工作流实例,分发子任务
  • Master-Standby 热备份主节点,当主节点宕机,立刻切换为活动主节点
  • Worker 任务节点,可部署在多个机器上,运行节点任务
  • Http-Server http服务节点,接受请求 Aaron Swartz

安装配置

1、从docker开始

目前已制作一份docker服务编排配置文件,通过docker直接快速初始化系统环境,体验系统的使用。 从百度网盘下载 https://pan.baidu.com/s/1erZbngufjK5dw6vPYJuAaQ

#解压
tar -xvf docker-akkalfow-2.12.1.tar.gz
#进入目录
cd docker
#构建镜像
docker-compose build
# 执行启动系统
docker-compose up

等系统启动完毕后,过程大概30s,打开浏览器,输入:http://localhost:8080/login, 管理员用户密码分别为: admin/123,点击“登录”,enjoin it!

2、打包

  • 也可以直接在这里下载akkaflow-x.x.zip,这是已编译的安装包,只包括后端调度系统。
  • 或把代码拉下来,用sbt-native-packager进行编译打包(目录下直接运行sbt dist)

2、安装

  • 安装环境:Linux系统(UTF8编码环境)或MacOS、jdk1.8或以上、MySQL5.7或以上(UTF8编码)

3、目录说明

  • sbin 存放用户操作命令,如启动节点命令等
  • lib 存放相关jar包
  • logs 存放相关日志
  • config 存放相关配置文件
  • xmlconfig 存放示例工作流文件,系统启动时会自动载入

4、安装步骤 (单点部署):

  • 解压到/your/app/dir
  • 准备一个mysql数据库,(如数据库名称为wf,用户密码分别为root/root)
  • 准备一个邮箱账户(推荐用网易邮箱),支持smtp方式发送邮件。
  • 修改配置文件 config/application.conf中以下部分(基本修改数据库以及邮件配置项就可以了)
  //配置
workflow {
  node {
    master {        //主节点,所部署机器端口,目前只支持单主节点
      hostname = "127.0.0.1"    //若内网,则为内网IP,若公网部署,则为公网IP,一个集群中,这个是固定的
      port = 2751
    }
    standby { //备份主节点
      port = 2752
    }
    worker {      //工作节点,所部署机器端口,支持单个机器上多个工作节点
      ports = [2851, 2852, 2853]
    }
    http-server {    //http-server节点
      port = 2951
      http-port = 8090  //http访问端口
    }
  }
  current.inner.hostname = "127.0.0.1"      //当前机器内网IP
  current.public.hostname = "127.0.0.1"          //当前机器公网IP,若部署在内网,则与内网IP一致

  mysql {   //用mysql来持久化数据
    user = "root"
    password = "root"
    jdbc-url = "jdbc:mysql://localhost:3306/wf?useSSL=false&autoReconnect=true&failOverReadOnly=false"
    max-active = 10
    init-size = 5
    min-idle = 5
    max-wait = 6000
    validation-query = "select 1"
    min-evictable-idle-time-millis = 300000

  }
  email {  //告警邮箱设置
    hostname = "smtp.126.com"
    smtp-port = 25    //smtp端口,可选
    auth = true
    account = "[email protected]"
    nickname = "测试任务告警"
    password = "******"
    charset = "utf8"
    is-enabled = true
    node-retry-fail-times = 1  //节点执行n次失败才发出重试失败告警
  }
  xml-loader {  //xml装载器配置
    workflow-dir = "xmlconfig"
    scan-interval = 5   //单位:秒
  }
  cron-runner { //定时器配置
    reset = "59 23 * * *"   //定期重置所有工作流状态
    plan = "1 0 * * *"
  }
}
  • 启动角色(独立部署模式)
    其中,单节点部署,是把master、worker、http-servers在同一台机器以不同进程启动 执行: ./standalone-startup
  • 查看启动日志
    启动时会在终端打印日志,另外,日志也追加到./logs/run.log中,tail一下日志,看下启动时是否有异常,无异常则表示启动成功。
  • 查看进程
    启动后,使用jps查看进程
2338 HttpServer
2278 Worker
2124 Master

注意:akkaflow工作流定义文件可以存放于目录xmlconfig下,akkaflow启动时,会自动并一直扫描xmlconfig下面的文件,生成对应的worflow,目录xmlconfig/example下有工作流定义示例。

5、关闭集群

执行./sbin/stop-cluster, 关闭集群系统

命令使用

1、操作命令

  • 统一操作命令入口:sbin/akka

2、角色节点操作命令

  • standalone模式启动:sbin/standalone-startup(该模式下单机会启动master、worker、master-standby、http-server)
  • master节点启动:sbin/master-startup
  • worker节点启动:sbin/worker-startup
  • http-server节点启动:sbin/httpserver-startup
  • master-standby节点启动:sbin/master-standby-startup
  • 关闭集群:sbin/stop-cluster

版本计划

  1. 界面集成一个可视化拖拉配置工作流与调度器的开发功能模块(这一块感觉自己做不来,有兴趣的前端开发同学可以联系我,共同合作开发)。
  2. 增加运行节点收集机器性能指标的功能。
  3. 外面套一层功能权限管理的模块,区分限制人员角色模块及数据权限,支持多人使用或协助的场景。

akkaflow's People

Contributors

kent7306 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

akkaflow's Issues

http会话进入处理流之后,如何找到处理结果对应的会话?

您好,请教一个问题。
我需要把当前项目逐步修改为异步的,当前项目servlet容器是tomcat。我有一个(一组)actor。当tomcat每次收到请求就发送消息给orderActor排队处理。但orderActor得到请求时可以获取 sender, 但是当它处理完请求时,由于异步处理的关系,是无法得到这个请求的sender的,我也就不知道该把结果返回给那个http session了。
我可能没讲清楚2333, 这个帖子里的问题和我想问的一样

关于主备切换的疑问

主备切换的时候 当standby的节点active的时刻 信息是如何通知到worker节点的呢 看了半天没看明白

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.