MarkLogic версии 9.0-6.1
Мы реализовали два шаблона для пакетной загрузки.
Схема 1: MLCP
Шаблон 2: Informatica (или NiFi) читает файл NDJSON и делает вызовы MarkLogic REST API PUT для каждого JSON в файле NDJSON.
Наша производственная коробка представляет собой трехузловой кластер с 72 ядрами.
Наши задания MLCP выполняются довольно хорошо с количеством потоков по умолчанию, равным 4, и максимум у нас есть 3 задания MLCP, работающих параллельно, что гарантирует, что не менее 60 ядер доступны для обработки в реальном времени (или почти в реальном времени) в любой момент времени.
Однако я не уверен, как пакетные задания Informatica / NiFi используют ядра. Как и MLCP, есть ли способ ограничить количество ядер, используемых заданиями Informatica / NiFi, чтобы гарантировать, что для обработки в реальном времени доступно достаточное количество ядер / потоков?
По мере того, как мы добавляем в производство все больше и больше процессов, мы видим, что значительно увеличивается количество ошибок тайм-аута для вызовов PUT / GET REST API в реальном времени. Эти вызовы обычно занимают всего несколько миллисекунд (когда мы запускаем их по отдельности), поэтому я предполагаю, что конкуренция за ресурсы вызывает тайм-ауты.
У нас есть возможность масштабировать узлы в кластере, но эта ситуация заставила меня подумать, что MLCP - лучший дизайн, чем вызовы REST PUT для пакетного приема, поскольку у нас есть лучший контроль над ограничением ядер / потоков, используемых каждым пакетным процессом, обеспечение наличия достаточного количества ядер для обработки в реальном времени. Есть ли способ контролировать / ограничивать ресурсы, используемые NiFi, если они используются для пакетной загрузки?
Пожалуйста, предложите. Заранее спасибо!