2

这个问题说明了一切。我该如何做以下事情之一:

  • 如何限制一个处理器集群范围内运行的并发任务数量?
  • 我运行的节点是否有任何唯一且简短的 ID?我可以使用这些 ID 附加到要加载的数据库表名(请参阅下面的详细信息)并为每个连接提供一个独占表。

我有一个 NIFI 集群和一个自写的专用处理器,它通过 JDBC 将大量数据加载到数据库中(每秒最多 20Mio 行)。它使用了一些数据库供应商特定的调优技巧,在我的特定情况下非常快。其中一个技巧需要为每个连接加载一个独占的空表。

目前,我的处理器在 NIFI-Cluster 中为每个节点打开一个连接(它从DBCPConnectionPool. 集群中有大约 90-100 个节点,我将获得 90-100 个连接——所有这些连接都同时批量加载数据。

我正在使用 NIFI 1.3.0.0

非常感谢任何帮助或评论。抱歉没有显示任何代码。大约 700 行并没有真正帮助解决这个问题。但我打算把它放在 Git 上,并作为开源项目 Kylo 的一部分。

4

1 回答 1

4

NiFi 中拆分任务的一种常见方法是将流文件拆分为主节点上的多个文件。然后其他节点将提取其中一个流文件并对其进行处理。

在您的情况下,每个文件都将包含一系列要从表中提取的值。假设您有 100 行,并且只想要 3 个节点来提取数据。因此,您将创建 3 个流文件,每个文件都有单独的属性值:

  1. 开始行 ID=1,结束行 ID=33
  2. 开始行 ID=34,结束行 ID=66
  3. 开始行 ID=67,结束行 ID=100

然后节点会从远程进程组或队列(例如 JMS 或 SQS)中获取流文件。只有 3 个流文件,因此从连接加载数据的节点不超过 3 个。

于 2017-08-24T21:06:05.920 回答