Настройка распределения сообщений с помощью sessioned custom#
Описание#
По умолчанию всегда используется старый протокол sessioned. При использовании протокола sessioned таски распределяются «случайным» образом.
Протокол sessioned custom реализует балансировку тасок коннекторов следующим образом:
при условии, когда количество тасок коннектора равно количеству хостов – таски коннектора гарантированно перераспределяются по хостам равномерно и возвращаются к такому состоянию после перезапусков воркера;
если количество тасок коннектора не равно количеству хостов - таски распределяются условно равномерно по принципу round-robin.
Для активации протокола sessioned custom необходимо выполнить задание Jenkin, подробнее описано в документе «Руководство по системному администрированию», раздел Активация альтернативных протоколов балансировки тасок коннекторов.
Поведение протокола sessioned custom настраивается с помощью задания параметра worker.rack.
Протокол sessioned custom проверяет в файле worker.properties наличие параметра worker.rack:
если в конфигурации воркера не задан параметр
worker.rack, коннекторы равномерно распределяются по всем воркерам (все воркеры работают на одном ЦОДе);если задан параметр
worker.rack– балансировка сначала равномерно распределяет коннекторы по ЦОДам, потом внутри каждого ЦОДа между воркерами. При этом учитывается изначальная загрузка ЦОДов – т. е. если на одном ЦОДе работает больше воркеров, то нагрузка на него будет подаваться больше и после балансировки. Поэтому после балансировки равномерности в количестве коннекторов на ЦОДах не будет.
Определение ЦОДов#
У каждого воркера в проперти-файле есть свой параметр
worker.rackс именем ЦОДа (так называемый признак цодовости).Присоединяясь к группе, каждый воркер передает координатору и затем лидер-воркеру сериализованные метаданные и параметр
worker.rack.Лидер делает обход всех воркеров, у каждого достает параметр и десереализует его.
Лидер создает
Assigmentсо списком всех ЦОДов.Производится расчет, сколько коннекторов каждого воркера будет определенно каждому ЦОДу.
Производится расчет, сколько коннекторов каждому воркеру внутри ЦОДа будет определено.
Каждую балансировку параметр проверяется на случай появления нового воркера с ЦОДом или потери старого.
Примеры балансировки#
На каждом хосте есть по одному воркеру. Все хосты расположены в едином кластере, т.е. у всех одна общая кафка, которая балансирует.
Создается несколько воркеров на разных ЦОДах с разными параметрами. У каждого воркера свой личный идентификаторworker.rack.
Далее происходит балансировка у лидер-воркера, он начинает распределять коннекторы.
До балансировки: На каждом из трех ЦОДов запущено по одному воркеру с тремя коннекторами:
Ц - цод, В - воркер, К - коннектор
На 1 воркере: Ц1В1К1, Ц1В1К2, Ц1В1К3.
На 2 воркере: Ц2В2К1, Ц2В2К2, Ц2В2К3.
На 3 воркере: Ц3В3К1, Ц3В3К2, Ц3В3К3.
Во время балансировки происходит расчет, сколько коннекторов от каждого воркера на каждом ЦОДе должно быть расположено. В данном случае, по одному.
После балансировки: На каждом ЦОДе гарантированно будет расположено по одному коннектору от каждого воркера каждого ЦОДа без остатка.
На 1 воркере: Ц1В1К1, Ц2В2К1, Ц3В3К1.
На 2 воркере: Ц1В1К2, Ц2В2К2, Ц3В3К2.
На 3 воркере: Ц1В1К3, Ц2В2К3, Ц3В3К3.

До балансировки: На каждом из двух ЦОДов запущено по два воркера с четырьмя коннекторами.
Ц - цод, В - воркер, К - коннектор
Цод 1:
1 воркер: Ц1В1К1, Ц1В1К2, Ц1В1К3, Ц1В1К4
2 воркер: Ц1В2К1, Ц1В2К2, Ц1В2К3, Ц1В2К4
Цод 2:
1 воркер: Ц2В1К1, Ц2В1К2, Ц2В1К3, Ц2В1К4
2 воркер: Ц2В2К1, Ц2В2К2, Ц2В2К3, Ц2В2К4
После балансировки: На каждом ЦОДе гарантированно будет расположено по два коннектора от каждого воркера. На каждом воркере будет гарантировано по одному коннектору от других воркеров. Сначала будет произведена балансировка, которая распределит коннекторы по ЦОДам. Далее будет произведена балансировка коннекторов внутри ЦОДа между воркерами.
Цод 1:
1 воркер: Ц1В1К1, Ц1В2К1, Ц2В1К1, Ц2В2К1
2 воркер: Ц1В1К2, Ц1В2К2, Ц2В1К2, Ц2В2К2
Цод 2:
1 воркер: Ц1В1К3, Ц1В2К3, Ц2В1К3, Ц2В2К3
2 воркер: Ц1В1К4, Ц1В2К4, Ц2В1К4, Ц2В2К4
