如何在Apache NiFi中自动化DBCPConnectionPool控制器服务?

时间:2018-04-03 11:08:52

标签: apache apache-nifi hortonworks-data-platform hortonworks-dataflow apache-minifi

我是Apache NiFi的新手,我的基本任务是使用Apache Nifi将数据从多个数据库源摄取到HDFS中。我用的是DBCPConnectionPool'数据库连接池服务的控制器服务,我需要提供诸如“数据库连接URL'数据库驱动程序类名称'数据库驱动程序位置”等信息, '数据库用户',' Passoword'现在,由于我是从多个数据源中摄取的,因此每次源数据库更改时我都需要手动更改上述所有信息。我正在寻找一种方法,以便我们可以自动执行此任务。例如,' DBCPConnectionPool'控制器服务应该能够动态获取数据库连接URL,数据库驱动程序类名称'和其他信息取决于源数据库。

2 个答案:

答案 0 :(得分:2)

@Rishab Prasad,

NiFi支持RestAPI以动态更改值“DBCPConnectionPool”属性。

检查以下参考,但为此您需要在所需的处理器中创建空的cotroller服务。

https://nifi.apache.org/docs/nifi-docs/rest-api/index.html

如果你创建了空控制器服务,那么它具有单独的id。在上面的api api的帮助下更新控制器服务,你可以动态地改变它的值。

这是动态更改DBCP连接池的唯一方法。

否则您需要更改nifi源以满足您的要求。

答案 1 :(得分:0)

您应该创建一个DBCPConnectionPoolLookup控制器,

来自Nifi的文档:

  

提供一个DBCPService,可用于动态选择另一个DBCPService。此服务要求在请求连接时传入名为“ database.name”的属性,如果缺少该属性,则将引发异常。 “ database.name”的值将用于选择已使用该名称注册的DBCPService。这将允许定义和注册多个DBCPService,然后在运行时通过使用适当的'database.name'属性标记流文件来动态选择。

想法是为每个数据库都有一个DBCPConnectionPool,并使用DBCPConnectionPoolLookup引用它们。

因此,设置完成后,您只需更改流文件中的database.name属性即可,即使用UpdateAttribute

除非需要采取特定的措施,否则REST并不是可行的方法,因为您必须跟踪处理器的ID,并且必须管理DBCPConnectionPool的重启,这会导致不必要的开发REST客户端/脚本。