MarkLogic - Предложение по дизайну для эффективной пакетной обработки

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, если они используются для пакетной загрузки?

Пожалуйста, предложите. Заранее спасибо!


person Bhanu    schedule 24.10.2019    source источник
comment
Это звучит как вопрос Informatica / NiFi, поскольку проблема, похоже, заключается в том, как контролировать количество одновременных запросов, которые он делает к ML.   -  person wst    schedule 24.10.2019


Ответы (1)


Похоже, это проблема при использовании Informatica, поскольку у Informatica нет собственного коннектора для MarkLogic. Следовательно, мы должны выполнить вызов REST PUT для каждого документа JSON в файле. Кроме того, потоками управляет informatica, поэтому разработчик мало контролирует ограничение максимального количества потоков.

Однако у NiFi есть собственный коннектор MarkLogic, который использует java DM SDK вместо вызовов REST API для приема данных. Как видим, это более эффективно как с точки зрения производительности, так и с точки зрения масштабируемости.

Решение для клиентов Informatica, похоже, делает доступным собственный коннектор для MarkLogic (точно так же, как MongoDB, SalesForce и т. Д.).

person Bhanu    schedule 25.10.2019