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