В 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 обрабатывает данные из множества разнородных источников и может передавать их через несколько различных процессоров. Давайте использовать следующий пример (игнорируем типы процессоров, просто сосредоточимся на заголовках):
Во-первых, относительная скорость входящих данных может быть различной в зависимости от источника / точки приема. В этом случае опрос базы данных выполняется один раз в минуту, а опрос HTTP - каждые 5 секунд, а хвост файла - каждую секунду. Таким образом, даже если запись в базе данных на 59 секунд "старше" другой, если они захвачены при одном и том же исполнении процессора, они одновременно войдут в NiFi и потоковый файл (файлы) (в зависимости от разделения) будет иметь то же самое Время начала
Если некоторые данные, поступающие в систему, "грязные", они направляются на процессор, который "очищает" их. Этот процессор занимает 3 секунды для выполнения.
Если бы и чистые отношения, и отношения успеха из "Чистых данных" перешли непосредственно к "Обработать данные", вы не смогли бы контролировать порядок обработки этих потоковых файлов. Однако, поскольку существует последовательность, объединяющая эти очереди, вы можете выбрать приоритет в очереди и управлять этим порядком. Вы хотите, чтобы первый потоковый файл входил в эту очередь, обработанную первым, или вы хотите, чтобы потоковые файлы, которые вошли в NiFi ранее, обрабатывались первыми, даже если они вошли в эту конкретную очередь после более нового потокового файла?
Это надуманный пример, но вы можете применить его к ситуациям аварийного восстановления, когда некоторые данные были пропущены для временного окна и теперь восстанавливаются, или поток, который обрабатывает данные, чувствительные ко времени, и данные недействительны после определенного периода времени прошло. Если вы используете противодавление или получение данных большими (медленными) пакетами, вы можете увидеть, как в некоторых случаях старшее сначала менее ценно, и наоборот.