В уроке про партиции мы видели правило группы: каждую партицию читает ровно один её участник. Тогда это было просто правило. Сегодня разберём, кто раздаёт партиции, как группа узнаёт, что участник упал, и почему обработчик оплат «Гонца» должен уметь уходить из группы вежливо.
Бригада курьеров
У «Гонца» город поделён на районы. Утром на смену выходит бригада, и старший раздаёт районы: тебе Центр и Уралмаш, тебе ВИЗ и Эльмаш. Каждый курьер отвечает за свои районы, и два курьера не повезут один заказ.
Пришёл ещё один курьер, и старший перераздаёт районы, чтобы нагрузка стала ровнее. Курьер отпросился домой и сказал об этом старшему: его районы сразу отдают другим. А если курьер просто пропал и не берёт трубку, старший какое-то время ждёт: вдруг он в лифте. Только когда ждать уже некогда, его районы раздают остальным.
Бригада это консьюмер-группа, районы это партиции, а старший это координатор.
Кто есть кто
Консьюмер-группа это консьюмеры с одинаковым group.id. Для Kafka это одна команда, которая делает одну работу.
Координатор группы это один из брокеров. Он помнит участников группы и следит, что они живы. Каждый консьюмер раз в несколько секунд шлёт ему heartbeat, у Java-клиента по умолчанию раз в 3 секунды.
Ребаланс это перераздача партиций. Он случается, когда:
- в группу вошёл новый участник;
- участник вышел сам, закрывшись через
closeилиdisconnect; - участник перестал слать heartbeat дольше, чем
session.timeout.ms, у Java-клиента это 45 секунд; - участник слишком долго обрабатывал пачку и не звал
pollдольшеmax.poll.interval.ms, по умолчанию 5 минут; - в топике стало больше партиций.
Главная разница здесь между уходом и падением. Ушедший сам консьюмер говорит координатору «я всё», и ребаланс начинается сразу. Упавший молчит, и его партиции 45 секунд никто не читает: группа ждёт, вдруг это сетевой сбой.
урок из курса
Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.