Раздел 26 · Data Engineering

Консьюмеры и группы: параллельное чтение

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

В уроке про партиции мы видели правило группы: каждую партицию читает ровно один её участник. Тогда это было просто правило. Сегодня разберём, кто раздаёт партиции, как группа узнаёт, что участник упал, и почему обработчик оплат «Гонца» должен уметь уходить из группы вежливо.

Бригада курьеров

У «Гонца» город поделён на районы. Утром на смену выходит бригада, и старший раздаёт районы: тебе Центр и Уралмаш, тебе ВИЗ и Эльмаш. Каждый курьер отвечает за свои районы, и два курьера не повезут один заказ.

Пришёл ещё один курьер, и старший перераздаёт районы, чтобы нагрузка стала ровнее. Курьер отпросился домой и сказал об этом старшему: его районы сразу отдают другим. А если курьер просто пропал и не берёт трубку, старший какое-то время ждёт: вдруг он в лифте. Только когда ждать уже некогда, его районы раздают остальным.

Бригада это консьюмер-группа, районы это партиции, а старший это координатор.

Кто есть кто

Консьюмер-группа это консьюмеры с одинаковым group.id. Для Kafka это одна команда, которая делает одну работу.

Координатор группы это один из брокеров. Он помнит участников группы и следит, что они живы. Каждый консьюмер раз в несколько секунд шлёт ему heartbeat, у Java-клиента по умолчанию раз в 3 секунды.

Ребаланс это перераздача партиций. Он случается, когда:

  • в группу вошёл новый участник;
  • участник вышел сам, закрывшись через close или disconnect;
  • участник перестал слать heartbeat дольше, чем session.timeout.ms, у Java-клиента это 45 секунд;
  • участник слишком долго обрабатывал пачку и не звал poll дольше max.poll.interval.ms, по умолчанию 5 минут;
  • в топике стало больше партиций.

Главная разница здесь между уходом и падением. Ушедший сам консьюмер говорит координатору «я всё», и ребаланс начинается сразу. Упавший молчит, и его партиции 45 секунд никто не читает: группа ждёт, вдруг это сетевой сбой.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.