EIP(Enterprise Integration Patterns)全名是企业集成模式,是各种MOM消息中间件和ESB的理论基础。我们基于EIP的理论,利用数据拉取和分发工具——NIFI,总结了一系列实战模板,快速便捷地对多种异构数据源和数据格式进解析。
基于EIP的数据集成实战
在谈EIP前我们了解下其他两个概念,SOA和ESB。
先简单介绍一下SOA架构的示意图,中间的单体服务就是SOA的部分,SOA最小的业务单元就是服务,服务内有许多模块。
微服务架构就是SOA的升级版,微服务将SOA服务内的模块做了拆分,颗粒度更细,降低了耦合度,即使某个服务出现问题,也不会影响其他服务的正常运行。
企业级的应用通常会有很多的SOA服务,各个服务的开发语言和协议可能也不一样,服务间调用会有很高的成本,ESB很好的解决了这个问题。
ESB是服务的请求者和提供者之间的一个中间件,它将不同平台的异构服务用管道的形式连接起来,转换成消息流,再通过中介处理,最后将消息以适当的形式转发到目的地。
SOA和ESB的理论基础来自于哪儿呢?就是我们下面要讲的EIP,EIP全名是企业集成模式。
EIP框架围绕消息集成和传输和转换可能出现的场景做了整理归纳,包含了发送方,消息体、管道、路由(根据消息的特征确定发送到哪个接收方)、消息转换,最后到接收方。参考EIP框架实现企业应用集成的产品有很多,NIFI就是其中一个。
什么是NIFI?
NIFI是一个数据拉取、数据处理和分发的工具,用于自动化管理系统间的数据流。
接下来我们讲NIFI涉及到的几个核心概念:
●FlowFile文件流 表示通过系统移动的每个对象,包含数据流的基本属性
●Connection 连接器 负责不同处理器之间的连接,是数据的有界缓冲区
●Processor处理器 负责实际对数据流执行工作
●Flow Controller流控制器 管理进程使用的线程及其分配
P1处理器接入数据源,比如说从数据库获取数据,然后将每条数据转换成FlowFile,FlowFile从P1处理器传输到P2处理器,需要一个管道,就是Connector。当然这是最简单的示例,具体业务里P1和P2中间还有其他的处理器。
NIFI相比其他的产品应用更加广泛,能解析多种异构数据源和数据格式,支持的主流数据库有PostgreSQL、MySQL、SqlServer、Oracle,也支持Http请求、解析CSV文件、MQTT和KAFKA等数据格式。
可以总结为以下6大核心优势:
NIFI通用模板看这里!
虽然说NIFI内置了很多的处理器,但是要挑选适合的处理器,将它们组装起来,实现业务功能,还是需要花费点时间,因此我们做了一些通用的模板,大家只要修改一些配置信息,就能用。
下面给大家展示一下我们整合过的几个模板示意图:
当然,如果内置的处理器不能满足业务需求,也可以创建自定义处理器。使用mvn archetype:generate命令创建nifi处理器模板工程,然后在OnTrigger方法中实现具体的业务逻辑,将打包出的nar包放到工程目录的lib文件夹下,重启NIFI后就可以了。同时NIFI也提供了单元测试的工具类TestRunner。
使用注意点
1、事先弄清需要同步增量数据还是全量数据,如果需要同步增量数据,采用了全量数据,就会导致大量的重复数据。
2、定时拉取需要设置时间,默认值0会一直运行,占用服务器内存
3、获取CSV文件数据设置从单个节点获取,否则会有重复数据
4、磁盘IO是NIFI的瓶颈,建议使用集群
5、服务器系统的配置不同吞吐量和延迟也有很大的不同
6、需要测试所用服务器的吞吐量
文章参考链接