Кило | Функциональность High Water Mark
Я кормлю каждые пять минут и использую функцию водяного знака загрузки / выпуска. Рассмотрим сценарий, в котором выполнение задания заняло более 5 минут, а фиксация водяного знака не произошла.
В этом сценарии Kylo запустит другой экземпляр канала со старым водяным знаком или будет ждать выполнения коммита?
3 ответа
Если водяной знак активен (т. Е. Потоковый файл загрузил водяной знак и обрабатывает его, но еще не выпустил его), новый потоковый файл, пытающийся снова загрузить тот же водяной знак, будет заблокирован. Он будет ожидать освобождения активного водяного знака (посредством фиксации или отклонения).
Вы можете осуществлять контроль над этим поведением через свойство " Active Water Mark Strategy " на процессоре " LoadHighWaterMark ". Это может помочь в тех случаях, когда обработка зависает или занимает больше времени, чем ожидалось. Если для стратегии задано значение "Урожай", процессор будет работать, если водяной знак активен. Количество раз, когда происходит доходность, настраивается через свойство процессора " Максимальный счетчик урожая". Как только будет достигнут этот счетчик урожая, процессор направит потоковый файл в отношение " ActiveFailure ". Длительность каждого урожая может быть установлена через Настройки -> Длительность урожая на процессоре. Если для стратегии задано значение " Маршрут ", процессор немедленно направит потоковый файл во взаимосвязь " ActiveFailure ".
Позаботьтесь об использовании процессора ReleaseHighWaterMark в конечных отношениях Success, Failure и ActiveFailure. Он поддерживает два режима - зафиксировать и отклонить.
В ответ на ваш конкретный вопрос:
Если ваш процессор LoadHighWaterMark является первым в потоке вашего канала (общий случай), то, когда он снова просыпается через 5 минут, когда водяной знак активен, он фактически ничего не будет делать (после удаления любого созданного файла потока) и будет ждать еще 5 минут будет запланировано снова. Процессор выдаст в первую очередь, но, поскольку типичное время выхода составляет менее 5 минут, выход не является равным.
Если ваш процессор LoadHighWaterMark не является первым в потоке, то потоковый файл, созданный после 5-минутного пробуждения, будет помещен в очередь, и процессор либо выдаст, либо оштрафует этот потоковый файл в зависимости от конфигурации. Это будет происходить каждый раз, когда обработка корма занимает более 5 минут.
Таким образом, ответ на ваш вопрос - нет, новая обработка не возобновится со старым водяным знаком, но будет ожидать фиксации или выпуска текущего водяного знака без фиксации. Два вышеупомянутых случая предполагают типичную конфигурацию, касающуюся реакции на активный водяной знак и того, что ваш корм ведет себя правильно, но для обработки определенной партии данных потребовалось больше 5 минут.
Обратите внимание, что если в среднем ваш канал обрабатывает данные более 5 минут, то было бы разумно изменить расписание канала на значение, превышающее 5 минут, чтобы очередь процессора не создавала резервные копии. Опять же, это необходимо, только если LoadHighWaterMark не первый процессор.
Общее поведение:
Если потоковый файл в настоящее время обрабатывается в секции потока NiFi вашего канала, ограниченной вашими процессорами LoadHighWaterMark и ReleaseHighWaterMark, то никакой другой потоковый файл не может войти в этот раздел потока, пока текущий потоковый файл обработки не выйдет из этого раздела, пройдя через процессор ReleaseHighWaterMark; является ли водяной знак совершенным или нет. Эта последовательность вашего потока рассматривается как критический раздел. Вот почему каждый путь потока, будь то путь успеха или путь отказа, должен проходить через ReleaseHighWaterMark некоторого вида.
Теперь поведение потока NiFi, когда ваш канал просыпается и пытается обработать новый файл потока, когда водяной знак активен, определяется расположением LoadHighWaterMark в вашем потоке и его конфигурацией. Параметр " Стратегия активной отметки уровня воды" влияет на поведение процессора при поступлении потокового файла, когда отметка уровня активности активна:
- YIELD - файл потока будет удален (если 1-й процессор) или помещен в очередь, и процессор выдаст его за указанное время выхода
- PENALIZE - файл будет оштрафован; вызывая его в очередь
- ROUTE - поток-файл будет немедленно направлен в отношение activeFailure.
Обратите внимание, что PENALIZE не имеет смысла, если процессор LoadHighWaterMark является первым процессором в потоке (без очереди). Поэтому установка стратегии Active Water Mark на PENALIZE будет обрабатываться так, как если бы она была установлена в YIELD.
Другим параметром конфигурации, влияющим на поведение, является Max Yield Count. Это значение указывает, сколько раз должна быть предпринята попытка загрузить и обработать активный водяной знак, прежде чем файл потока будет перенаправлен в отношение activeFailure. Таким образом, в вашем сценарии, если максимальный счетчик был установлен на 3, а текущая обработка подачи заняла более 20 минут (5 минут X 4), то все потоковые файлы, начиная с четвертого, будут немедленно направлены в activeFailure до активного обработка водяного знака завершена. В этот момент счетчик попыток сбрасывается обратно до 0, и следующий поступающий файл потока начнет обработку с новым значением водяного знака.
Мне нужно это подтвердить, но я понимаю, что новая отметка высокой воды будет работать только после того, как будет выпущена текущая отметка высокой воды. Важно обеспечить, чтобы все отношения "успех" и "отказ" заканчивались процессором ReleaseHighWaterMark. В противном случае ваш корм может оказаться в несогласованном состоянии, когда отметка максимальной воды не была выпущена, но новая отметка высокой воды не может быть загружена.