MarkLogic - проектное предложение для эффективной пакетной обработки - PullRequest
0 голосов
/ 24 октября 2019

MarkLogic версия 9.0-6.1

Мы реализовали два шаблона для пакетного приема.

Шаблон 1: MLCP

Шаблон 2: Informatica (или NiFi) читает NDJSONфайл и выполнение запросов MarkTogic REST API PUT для каждого JSON в файле NDJSON

Наш производственный блок представляет собой кластер из 3 узлов с 72 ядрами.

Наши задания MLCP работают довольно хорошо с количеством потоков по умолчанию, равным4 и максимум у нас есть 3 параллельных задания MLCP, обеспечивающих доступность как минимум 60 ядер для обработки в реальном времени (или почти в реальном времени) в любой момент времени.

Однако я не уверен, как пакетные задания Informatica / NiFi используют ядра. Как и в случае с MLCP, существует ли способ ограничения ядер, используемых заданиями Informatica / NiFi, чтобы обеспечить достаточное количество ядер / потоков, доступных для обработки в реальном времени?

По мере того, как мы добавляем все больше и больше процессов в производство, мы видим, чтоЗначительно увеличилось количество ошибок времени ожидания для вызовов PUT / GET API REST в реальном времени. Эти вызовы, как правило, занимают всего несколько миллисекунд (когда мы запускаем их по отдельности), поэтому я предполагаю, что конкуренция за ресурсы вызывает тайм-ауты.

У нас есть возможность масштабировать узлы в кластере, но эта ситуация заставила меня думать, что MLCP - лучшая конструкция, чем вызовы REST PUT для пакетного приема, поскольку мы лучше контролируем ограничение ядер / потоковиспользуется каждым пакетным процессом, обеспечивая достаточное количество ядер, доступных для обработки в реальном времени. Есть ли способ, которым мы можем контролировать / ограничивать ресурсы, используемые NiFi, если они используются для пакетного приема?

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

1 Ответ

0 голосов
/ 25 октября 2019

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

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

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

...