Как Flume обеспечивает надежность?

Apache Flume

Это 9-й день моего участия в августовском испытании обновлений.Подробности о мероприятии:Испытание августовского обновления

текст

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

С этой целью Flume предоставляет процессоры Flume Sink (процессор FlumeSink) для решения вышеуказанных проблем.

Процессоры приемников позволяют разработчикам определять группу приемников (группу приемников), группировать несколько приемников в один объект,

Таким образом, процессор приемника может обеспечить балансировку нагрузки для служб через несколько приемников в группе или обеспечить переключение с одного приемника на другой в случае кратковременного сбоя приемника.

балансировки нагрузки

Процессор стока балансировки нагрузки (Load Balancing Sink Processor) обеспечивает функцию балансировки нагрузки трафика на несколько стоков, поддерживает список активных индексов стоков, на которые должна быть распределена нагрузка.

Процессор приемника балансировки нагрузки поддерживает использование механизмов round_robin (циклический перебор) и random (случайный) выбора для распределения трафика. Механизм выбора по умолчанию — round_robin , но его можно переопределить конфигурацией. Он также поддерживает пользовательские классы, наследующие AbstractSinkSelector, для настройки механизм отбора.

При использовании селектор выберет следующий доступный приемник и вызовет его в соответствии с настроенным механизмом выбора.

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

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

Если все вызовы приемника терпят неудачу, селектор передает сбой исполнителю приемника.

Если свойство отсрочки включено, обработчик приемников внесет отказные приемники в черный список.

По истечении тайм-аута, если приемник по-прежнему не отвечает, время ожидания увеличивается экспоненциально, чтобы избежать зависания при длительном ожидании на не отвечающем приемнике.

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

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

Имя свойства По умолчанию инструкция
sinks - Список приемников, разделенных пробелами, участвующих в группе приемников.
processor.type default Имя типа компонента должно быть load_ba1ance
processor.backoff fa1se Установите приемник, который не может попасть в черный список
processor.selector round_robin Механизм выбора должен быть циклическим, случайным или полным путем класса пользовательского механизма выбора, унаследованного от AbstractSinkSelector.
processor.selector.maxTimeout 30000 Период ожидания для помещения отказавшего приемника в черный список.Если неисправный приемник не может быть включен по истечении указанного времени, период ожидания увеличивается экспоненциально.

Как видно из таблицы, значением по умолчанию свойства CPU.type является default, потому что CPU.type стокового процессора предоставляет 3 механизма обработки: default (значение по умолчанию), failover и load_ba1ance.

Среди них значение по умолчанию означает, что настроить и использовать один приемник очень просто, и не обязательно использовать группу приемника для инкапсуляции;

Другие failover и load_ba1ance представляют свойства конфигурации для failover и балансировки нагрузки соответственно.

отказоустойчивость

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

Как работает механизм аварийного переключения

Понизьте уровень отказавших приемников до отказавшего пула, назначьте им период восстановления в пуле, время восстановления увеличивается перед повторной попыткой, и когда приемник успешно отправит событие, он вернется в активный пул.

У приемника есть связанный с ним приоритет, чем выше значение, тем выше приоритет.

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

Если приоритет не указан, приоритет определяется в соответствии с порядком, в котором приемники указаны в файле конфигурации.

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

Имя свойства По умолчанию инструкция
sinks - Список приемников, разделенных пробелами, участвующих в группе приемников.
processor.type default Имя типа компонента должно быть отказоустойчивым
processor.priority.< sinkname > - Установить значение приоритета приемника
processor.maxPenalty 30000 Максимальное время задержки для отказавших приемников

В сравнении

Структурная схема Flume процессора отказоустойчивого приемника и процессора приемника балансировки нагрузки в основном одинакова.

Основное различие между двумя процессорами заключается в том, что в процессоре приемника балансировки нагрузки каждый активный приемник будет обрабатывать события по очереди/произвольно;

Процессор отказоустойчивого приемника позволяет обрабатывать событие только одному активному приемнику с высоким приоритетом, и только после сбоя текущего приемника он продолжает выбирать другой активный приемник с высоким приоритетом для обработки события.

упражняться

  1. Ниже приведен пример настройки агента с именем a1 с использованием процессора приемника балансировки нагрузки.
a1.sinkgroups=g1
a1.sinkgroups.g1.sinks=k1 k2
a1.sinkgroups.g1.processor.type=load_balance
a1.sinkgroups.g1.processor.backoff=true
a1.sinkgroups.g1.processor.selector=random
  1. Ниже приведен пример настройки агента с именем a1 с использованием отказоустойчивого приемника.
a1.sinkgroups=g1
a1.sinkgroups.g1.sinks=k1 k2
a1.sinkgroups.g1.processor.type=failover
a1.sinkgroups.g1.processor.priority.k1=5
a1.sinkgroups.g1.processor.priority.k2=10
a1.sinkgroups.g1.processor.maxpenalty=10000