В Nifi какая разница между FirstInFirstOutPrioritizer и OldestFlowFileFirstPrioritizer

Руководство пользователя https://nifi.apache.org/docs/nifi-docs/html/user-guide.html содержит приведенную ниже информацию о приоритетах. Не могли бы вы помочь мне понять, как они различаются, и привести любой пример в реальном времени.

FirstInFirstOutPrioritizer: Учитывая два FlowFiles, тот, который первым достиг соединения, будет обработан первым.

OldestFlowFileFirstPrioritizer: учитывая два потока файлов, один из старейших в потоке данных будет обработан первым. "Это схема по умолчанию, которая используется, если не выбраны приоритеты".

2 ответа

Решение

Представьте себе два процессора A и B, которые оба подключены к воронке, а затем воронка подключается к процессору C.

Сценарий 1. Соединение между воронкой и процессором C имеет приоритет "первым пришел - первым обслужен".

В этом случае файлы потока в очереди между воронкой и соединением C будут обрабатываться строго в соответствии с порядком их поступления в очередь.

Сценарий 2 - Соединение между воронкой и процессором C имеет приоритет для самого старого потока в файле.

В этом случае уже могут быть потоковые файлы в очереди между воронкой и соединением C, но один из процессоров передает поток в ту очередь, которая старше всех потоковых файлов в этой очереди, он переместится на передний план.

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

Apache NiFi обрабатывает данные из множества разнородных источников и может передавать их через несколько различных процессоров. Давайте использовать следующий пример (игнорируем типы процессоров, просто сосредоточимся на заголовках):

Поток NiFi, демонстрирующий сценарии приоритетов

Во-первых, относительная скорость входящих данных может быть различной в зависимости от источника / точки приема. В этом случае опрос базы данных выполняется один раз в минуту, а опрос HTTP - каждые 5 секунд, а хвост файла - каждую секунду. Таким образом, даже если запись в базе данных на 59 секунд "старше" другой, если они захвачены при одном и том же исполнении процессора, они одновременно войдут в NiFi и потоковый файл (файлы) (в зависимости от разделения) будет иметь то же самое Время начала

Если некоторые данные, поступающие в систему, "грязные", они направляются на процессор, который "очищает" их. Этот процессор занимает 3 секунды для выполнения.

Если бы и чистые отношения, и отношения успеха из "Чистых данных" перешли непосредственно к "Обработать данные", вы не смогли бы контролировать порядок обработки этих потоковых файлов. Однако, поскольку существует последовательность, объединяющая эти очереди, вы можете выбрать приоритет в очереди и управлять этим порядком. Вы хотите, чтобы первый потоковый файл входил в эту очередь, обработанную первым, или вы хотите, чтобы потоковые файлы, которые вошли в NiFi ранее, обрабатывались первыми, даже если они вошли в эту конкретную очередь после более нового потокового файла?

Это надуманный пример, но вы можете применить его к ситуациям аварийного восстановления, когда некоторые данные были пропущены для временного окна и теперь восстанавливаются, или поток, который обрабатывает данные, чувствительные ко времени, и данные недействительны после определенного периода времени прошло. Если вы используете противодавление или получение данных большими (медленными) пакетами, вы можете увидеть, как в некоторых случаях старшее сначала менее ценно, и наоборот.

Другие вопросы по тегам