如何在 Apache NiFi 中自动化 DBCPConnectionPool Controller 服务?
How to automate DBCPConnectionPool Controller service in Apache NiFi?
我是 Apache NiFi 的新手,我的基本任务是使用 Apache Nifi 将来自多个数据库源的数据提取到 HDFS。我使用'DBCPConnectionPool'控制器服务做数据库连接池服务,这里需要提供'Database Connection URL'、'Database Driver Class Name'、'Database Driver Location'、'Database User'、[=17等信息=] 等。现在,由于我从多个数据源获取数据,所以每次源数据库发生变化时,我都需要手动更改上述所有信息。我正在寻找一种方法,以便我们可以自动执行此任务。例如,'DBCPConnectionPool'控制器服务应该能够根据源数据库动态获取'Database Connection URL'、'Database Driver Class Name'和其他信息。
@Rishab 普拉萨德,
NiFi 支持 RestAPI 动态更改值 'DBCPConnectionPool' 属性。
查看下面的参考资料,但为此您需要在所需的处理器中创建空的控制器服务。
https://nifi.apache.org/docs/nifi-docs/rest-api/index.html
如果您创建了空的控制器服务,则该服务具有单独的 ID。借助上述休息 api 更新控制器服务,您可以动态更改其值。
这是动态更改 DBCP 连接池的唯一方法。
否则你需要更换nifi源才能达到你的要求。
您应该创建一个 DBCPConnectionPoolLookup 控制器,
来自 Nifi 的文档:
Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.
想法是为每个数据库创建一个 DBCPConnectionPool 并使用 DBCPConnectionPoolLookup 引用它们。
因此,设置完成后,您只需更改流文件中的 database.name 属性,即使用 UpdateAttribute
REST 不是解决此问题的方法,除非需要特定操作,因为您必须跟踪处理器的 ID,并且必须管理 DBCPConnectionPool 的重启,这会导致不必要的开发您的 REST client/script.
我是 Apache NiFi 的新手,我的基本任务是使用 Apache Nifi 将来自多个数据库源的数据提取到 HDFS。我使用'DBCPConnectionPool'控制器服务做数据库连接池服务,这里需要提供'Database Connection URL'、'Database Driver Class Name'、'Database Driver Location'、'Database User'、[=17等信息=] 等。现在,由于我从多个数据源获取数据,所以每次源数据库发生变化时,我都需要手动更改上述所有信息。我正在寻找一种方法,以便我们可以自动执行此任务。例如,'DBCPConnectionPool'控制器服务应该能够根据源数据库动态获取'Database Connection URL'、'Database Driver Class Name'和其他信息。
@Rishab 普拉萨德,
NiFi 支持 RestAPI 动态更改值 'DBCPConnectionPool' 属性。
查看下面的参考资料,但为此您需要在所需的处理器中创建空的控制器服务。
https://nifi.apache.org/docs/nifi-docs/rest-api/index.html
如果您创建了空的控制器服务,则该服务具有单独的 ID。借助上述休息 api 更新控制器服务,您可以动态更改其值。
这是动态更改 DBCP 连接池的唯一方法。
否则你需要更换nifi源才能达到你的要求。
您应该创建一个 DBCPConnectionPoolLookup 控制器,
来自 Nifi 的文档:
Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.
想法是为每个数据库创建一个 DBCPConnectionPool 并使用 DBCPConnectionPoolLookup 引用它们。
因此,设置完成后,您只需更改流文件中的 database.name 属性,即使用 UpdateAttribute
REST 不是解决此问题的方法,除非需要特定操作,因为您必须跟踪处理器的 ID,并且必须管理 DBCPConnectionPool 的重启,这会导致不必要的开发您的 REST client/script.