MarkLogic - 高效批处理的设计建议

MarkLogic - Design suggestion for efficient Batch processing

MarkLogic 版本 9.0-6.1

我们已经实现了两种批量摄取模式。

模式 1:MLCP

模式 2:Informatica(或 NiFi)读取 NDJSON 文件并为 NDJSON 文件中的每个 JSON 进行 MarkLogic REST API PUT 调用

我们的生产环境是一个 72 核的 3 节点集群。

我们的 MLCP 作业 运行 非常好,默认线程数为 4,最多我们有 3 个 MLCP 作业 运行 并行,确保至少有 60 个内核可用于实时(或近实时)在任何时间点处理。

但是,我不确定 Informatica/NiFi 批处理作业是如何用完内核的。与 MLCP 一样,有没有办法限制 Informatica/NiFi 作业使用的内核,以确保有足够的 cores/threads 可用于实时处理?

随着我们在生产中添加越来越多的进程,我们发现实时 REST API PUT/GET 调用的超时错误大幅增加。这些调用通常只需要几毫秒(当我们单独 运行 它们时),所以我猜测资源争用导致了超时。

我们可以选择扩展集群中的节点,但这种情况让我认为 MLCP 是一个比 REST PUT 调用更好的设计,因为我们可以更好地控制限制 cores/threads 由每个批处理过程使用,确保有足够的内核可用于实时处理。如果用于批量摄取,我们是否可以 control/limit NiFi 使用的资源?

求推荐。提前致谢!

这似乎是使用 Informatica 时的一个问题,因为 Informatica 没有用于 MarkLogic 的本机连接器。因此,我们必须为文件中的每个 JSON 文档进行 REST PUT 调用。此外,线程由 informatica 控制,因此开发人员几乎无法控制限制最大线程数。

但是,NiFi 具有本机 MarkLogic 连接器,它使用 java DM SDK 而不是 REST API 调用来摄取数据。正如我们所见,这在性能和可扩展性方面都更加高效。

Informatica 客户的解决方案似乎是为 MarkLogic 提供一个本地连接器(就像 MongoDB、SalesForce 等)。