Kettle之Carte最佳实践

前言

    kettle支持Carte服务级部署模式,即服务器后台会跑一个常驻Carte程序,job/trans都运行在这个服务里。这篇文章主要讲述carte从配置、任务提交到监控的实践。

0x01 介绍


    Kettle有多种运行模式,最简单易用的是直接运行Kitchen/Pan应用程序来执行job/transformations,但每次运行任务时,kitchen/pan都要启动一次。而应用的启动是有代价的,并且如果服务器上同时跑了很多Kitchen/Pan程序,也不利于资源分配和监控。

    Carte是一个轻量级的web服务,允许远程请求HTTP进行监控、启动、停止在Carte服务上运行的job和trans。运行Carte的服务器在kettle术语里称为slave server。

0x02 配置&启动


    Kettle的下载安装就不再赘述,carte的配置文件主要用来配置端口、安全认证等。比如配置文件pwd/carte-config-master.xml,配置项:

Kettle之Carte最佳实践_第1张图片

   port:绑定的端口号

   hostname: 绑定的IP

   username/password:认证用户

启动命令:nohup ./carte.sh pwd/carte-config-master.xml 2>&1 &

web地址:http://ip:9080,会提示输入用户名密码,可能Chrome不会有弹出框,多换个浏览器试试。

    在carte上跑的任务的日志统一输出到了carte日志里,不能为每个任务设置日志。

0x03 调用


远程提交job/trans时,同样支持资料库提交任务,carte服务器上需要提前配置好资料库。执行job的api是kettle/executeJob,通过curl提交命令:

curl -u "cluster:cluster" "http://dev-bi-cdh05:9080/kettle/executeJob/?rep=rep-test01&job=/test01_job&P1=test"

    -u :指定用户名和密码

    rep参数:指定配置的资料库

    job参数:执行的job

    P1参数:kettle的参数变量P1的值

访问web url可以看每个任务的运行状态、查看任务的运行日志:

Kettle之Carte最佳实践_第2张图片

0x04 监控


    在web上可以看到所提交的job/trans运行状态、查看日志,但获得的信息还是太有限,既然carte运行在JVM上,就可以用JMX的方式监控服务。开启JMX,只需在carte.sh文件的OPT这一行末尾新增: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9180 -Dcom.sun.management.jmxremote.ssl=false

上述配置jmx绑定9180端口,为了调试方便,禁用安全认证。开启JMX后,通过第三方服务就能很便捷的对carte应用和服务器各个指标进行监控,如carte内存使用情况、cpu占用率、GC、服务器物理内存等。

0x05 分布式


    独立部署的多台slave server,可以组成一个类似分布式的架构,各个slave进行抢占式执行任务。实现逻辑:同一时刻多个slave同时提交同一个任务,在任务内加唯一排他锁校验。举个例子,slave1和slave2同时提交任务A,在A中先判断有没有实际开始执行(比如查表中记录),如果没有执行就往数据库写一条记录,任务继续执行;如果判断A任务已经开始执行(比如从表中查到相关记录),任务就直接结束,不再处理后续业务。    

Kettle之Carte最佳实践_第3张图片

       这个框架设计重点在唯一排他锁校验,借助数据库表的主键特性也能实现这个功能: 假如任务id是表的主键,任务开始执行时往表里插入id,后来的slave再插入这个任务id时就会异常,就不用再处理后面业务。

    缺点:从任务角度看,本质上一个任务还是在一个服务上跑,这样在执行期间就存在单点问题,如果执行任务的slave宕掉,之上的任务不能进行故障转移

    优点:slave之间彼此独立,互不影响,如果单台slave宕机,不影响后续任务调度,从整个集群来看是高可用的。而且多个任务平均分布到多台slave上,也能达到负载均衡的效果

0x06 集群


    多台slave server可以组成一个集群,集群内指定一个节点充当master角色,其他节点是slave角色,kettle集群采用主从结构,由master统一提交任务。后续再写文章细聊集群。

本文首发于公众号:data之道

你可能感兴趣的:(Kettle之Carte最佳实践)