Пакетная вставка процессора Nifi - ошибка обработки

В настоящее время я пишу процессор ElasticSearch Nifi. Индивидуальные вставки/записи в ES не оптимальны, вместо этого предпочтительнее группировать документы. Что будет считаться оптимальным подходом в процессоре Nifi для отслеживания (пакетной обработки) документов (FlowFiles) и при определенном количестве их пакетной обработки? Что меня больше всего беспокоит, так это то, что если ES недоступен, не работает, сетевой раздел и т. Д., Помешает успешному выполнению пакета. Основной вопрос заключается в том, что у Nifi есть хранилище контента для организации очереди / обратного давления и т. Д. Есть ли предпочтительный метод его использования, чтобы гарантировать, что FlowFiles не будут потеряны, если пункт назначения не работает? Может быть, есть другой процессор, который я должен посмотреть для примера?

Я просмотрел процессор Mongo, Merge и т. д., чтобы попытаться получить представление о предпочтительном подходе к пакетной обработке внутри процессора, но, похоже, не нашел ничего конкретного. Мы ценим любые предложения.

Хороший шанс, что я упускаю из виду некоторые базовые функции, встроенные в Nifi. Я все еще довольно новичок в платформе.

Спасибо!


person scarpacci    schedule 25.11.2015    source источник


Ответы (1)


Отличный вопрос и довольно распространенная закономерность. Вот почему у нас есть концепция ProcessSession. Это позволяет вам отправлять ноль или более вещей на внешнюю конечную точку и фиксировать только после того, как вы знаете, что получатель подтвердил это. В этом смысле он предлагает хотя бы один раз семантику. Если протокол, который вы используете, поддерживает семантику стиля двухфазной фиксации, вы можете довольно близко подобраться к всегда неуловимой семантике ровно один раз. Большая часть деталей того, о чем вы здесь спрашиваете, будет зависеть от API и поведения целевых систем.

В кодовой базе Apache есть несколько примеров, которые показывают, как это сделать. Один из способов — создать объединенную коллекцию событий перед отправкой в ​​целевую систему. Зависит от его API. Я думаю, что PutMongo и PutSolr работают таким образом (хотя эксперты по этому вопросу должны были бы взвесить свое мнение). Пример, который может быть больше похож на то, что вы ищете, можно найти в PutSQL, который работает с пакетами потоковых файлов для отправки в одной транзакции (в целевой БД).

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java

Буду следить здесь, но могу привлечь внимание более крупной группы NiFi по адресу [email protected].

Спасибо Джо

person Joe Witt    schedule 26.11.2015
comment
Прохладно. Спасибо Джо! Я также отправил заметку на адрес [email protected]. Я думал, что если я получу ответ там, я перепостю здесь. Я очень ценю ваш ответ. Я посмотрю на примеры. - person scarpacci; 27.11.2015