2

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

4

2 回答 2

2

@Rishab 普拉萨德,

NiFi 支持 RestAPI 动态更改值 'DBCPConnectionPool' 属性。

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

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

如果您创建了空的控制器服务,那么它具有单独的 ID。借助上述用于更新控制器服务的 rest api,您可以动态更改其值。

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

否则,您需要更改 nifi 源以实现您的要求。

于 2018-04-03T11:24:31.393 回答
0

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

来自 Nifi 的文档:

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

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

因此,一旦设置完成,您只需从流程文件中更改 database.name 属性,即使用 UpdateAttribute

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

于 2019-04-10T12:35:45.063 回答