我们有多个用Java,C#,nodeJS和python编写的独立应用程序。所有这些应用程序共享一个共同属性 - 它们使用REST API基于每个客户的计划从某些源提取数据并将其存储在CSV文件中,稍后使用存储过程将数据从CSV文件导入到不同的SQL数据库。每个应用程序用于集成来自不同第三方服务的数据。
例如 - app A从源A'获取数据,app B从源B'获取数据
我正在考虑通过编写一个可以处理来自不同来源的数据的多租户单个应用程序来替换这些多个独立的应用程序。所有这些单独的小应用程序将配置为用Java编写的自定义作业。例如 - REST API身份验证,在创建CSV之前预处理数据等。
所以,我想编写一个从源A'获取数据的作业(Java文件)和从源B'获取数据的另一个作业。主应用程序将执行此自定义作业。主应用程序将支持诸如作业调度,日志记录等常用功能。
后来我打算用nifi来处理从CSV到SQL数据库的数据导入。
这会是一个好方法吗?我打算用Java编写这个应用程序。
如果我需要更新一个作业,我需要部署整个应用程序。如何绕过这个过程?有什么方法可以部署工作而不是整个应用程序吗?
构建此解决方案的好方法是什么?
答案 0 :(得分:1)
我认为如果您能够稍微调整您的术语/方法,您会发现可以使用Apache NiFi执行系统中的几乎所有任务。虽然NiFi旨在处理流数据而不是批处理/作业,但您可以使用CRON计时来安排任务执行(初始REST API调用和数据检索),然后将流文件发送到后续处理器。使用此模型,您可以提取数据,将数据视为离散记录,并在各种格式(如XML,JSON,CSV,Avro等)之间轻松转换,过滤,路由,转换和查询数据,然后将其路由到目标SQL数据库。所有这些操作都将具有实时监控,起源记录,审计,可重复性,日志记录,细粒度用户访问控制等。这还有一个额外的好处,您不需要编写任何代码来处理这些活动 - 您只需将组件拖放到流上即可。您可以对流的任何部分进行修改,而不会影响不相关的操作,因此不会中断数据流。