Kettle(三)分布式架构

相关术语和概念

  • 子服务器
    在Kettle中集群是由节点组成的,这些节点可以在不同的服务器上,也可以在同一台服务器上。每个节点都有自己的节点名、主机名、端口、用户名和密码等属性。我们可以在Spoon界面下新建子服务器并设置相关的属性。

  • 集群

在Kettle中集群分为动态集群和静态集群,两种集群都需要先定义一个Master节点,但是动态集群可以随时添加节点到集群,而静态集群需要事先定义好Master节点和若干个Slave节点。

  • Master节点
    在一个Kettle集群中只有一个Master节点,该节点的作用在于追踪Slave节点的运行状态。当然Master节点的作用不仅限于此,它还可以运行Client分配给自己的任务。

  • Slave节点
    一个集群中会包含若干个Slave节点,Slave节点的主要功能是执行Client分配给自己的任务,除此之外还向Master汇报自己的运行状态。

任务分发

集群是由一个Master节点和若干个Slave节点组成的,其中Master节点用来处理Transformatoin中没有指明使用集群的Step,而Slave节点用来处理被指明用集群运行的Step。假设我们定义好了一个使用集群运行的转换,客户端首先会对转换中的步骤进行切分,不同的步骤被分配到不同的服务器上。那客户端是如何分配任务的了?在启动Carte是我们会指定主机名和端口号,这时Carte会启动一个Web服务,接收客户端的请求,假设我们需要运行的转换如下图所示:

上面的记录集连接有一个“Cx2”的上标,表明该Step是在集群上运行的,该转换对应的任务分发结构如下图所示:

在Kettle中任务的分发采用的是Http协议,当任务分发结束之后各节点就要开始执行任务了。节点之间的通信采用的是TCP协议,使用Socket来实现的,各节点的通信流程如下图:

节点通信

与单机模式不同,不同的节点之间是需要相互通信的,Kettle通过前后的Step是否在一个节点上来添加RemoteStep,通过RemoteStep可以实现不同节点信息的交换,每个Step可以有负责写数据的RemoteStep和负责读数据的RemoteStep,这些RemoteStep都是在子线程中负责循环读写数据,整体的结构和单机版的保持一致,只是在数据传输方面使用了Socket。

发表评论

电子邮件地址不会被公开。 必填项已用*标注