Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
В чём разница между producer и consumer в RabbitMQ?
Producer (производитель) — это приложение или компонент, который создаёт и отправляет сообщения в брокер RabbitMQ через обменник (exchange). Consumer (потребитель) — это тот, кто подписывается на очередь (queue), получает сообщения и обрабатывает их. Producer не знает, кто и как обрабатывает сообщения, а consumer не знает, кто их отправил, что упрощает масштабирование и развязывает компоненты.
Могут ли несколько consumer‑ов читать из одной очереди?
Да, несколько consumer-ов могут одновременно читать из одной очереди. RabbitMQ по умолчанию будет распределять сообщения между активными потребителями по принципу round‑robin (или с учётом prefetch), что позволяет балансировать нагрузку. Каждый конкретный message в итоге будет доставлен и обработан ровно одним consumer-ом.
Для чего нужна consumer group в Kafka?
Consumer group позволяет:
Распределять сообщения между несколькими consumer-ами (балансировка нагрузки).
Масштабировать обработку (каждый consumer в группе читает часть партиций).
Гарантировать, что сообщение обрабатывается только одним consumer-ом в группе.
Какие ограничения существуют по масштабированию consumer group?
Главное ограничение consumer group — количество партиций. Один консьюмер может читать несколько партиций, но одна партиция не может читаться несколькими консьюмерами в одной группе. Если консьюмеров больше, чем партиций, часть из них будет простаивать. Также масштабирование ограничено стоимостью ребалансировок. Частые изменения состава группы могут временно останавливать обработку.
Как распределяются сообщения между consumer’ами?
Сообщения распределяются между consumer’ами через partition’ы. Каждый partition назначается ровно одному consumer’у внутри consumer group. Consumer читает все сообщения из своих partition’ов последовательно. Kafka не распределяет отдельные сообщения между consumer’ами напрямую. Распределение происходит на уровне partition’ов.
Что произойдет, если consumer’ов больше, чем partition’ов?
Как распределяются partition’ы между consumer’ами в группе?
Что происходит при добавлении нового consumer’а в группу?
Где хранятся offset’ы consumer-групп?
Что произойдёт при сбое consumer’а в Kafka?
Рейтинг:
4
Сложность:
5
Если consumer’ов больше, чем partition’ов, часть consumer’ов останется без работы. Kafka не может назначить один partition нескольким consumer’ам в одной группе. Такие consumer’ы будут находиться в состоянии ожидания. Они начнут получать данные только если появятся новые partition’ы или часть consumer’ов отключится. Это нормальное и ожидаемое поведение Kafka.
Рейтинг:
5
Сложность:
7
Partition’ы распределяются между consumer’ами внутри consumer group с помощью алгоритма назначения. За процесс отвечает group coordinator на стороне Kafka. Каждый partition назначается только одному consumer’у. Конкретный алгоритм распределения зависит от выбранной стратегии. Цель распределения — равномерно распределить нагрузку.
Рейтинг:
4
Сложность:
6
При добавлении нового consumer’а Kafka инициирует rebalance группы. Все partition’ы перераспределяются между consumer’ами. Новый consumer получает часть partition’ов. Старые consumer’ы могут потерять часть своих partition’ов. После завершения rebalance обработка сообщений продолжается.
Рейтинг:
5
Сложность:
5
Offset’ы consumer-групп хранятся в специальном внутреннем топике Kafka. Этот топик называется __consumer_offsets. Kafka сама управляет его репликацией и надёжностью. Consumer периодически коммитит offset’ы в этот топик. Благодаря этому прогресс чтения сохраняется даже при сбоях.
Рейтинг:
5
Сложность:
7
При сбое consumer’а Kafka инициирует ребаланс consumer-группы. Partition’ы, которые были закреплены за упавшим consumer’ом, перераспределяются между оставшимися. Новый consumer продолжит чтение с последнего закоммиченного offset’а. Неподтверждённые сообщения могут быть прочитаны повторно. Это нормальное и ожидаемое поведение.
Рейтинг:
2
Сложность:
6
Рейтинг:
2
Сложность:
6
Рейтинг:
1
Сложность:
5
Рейтинг:
5
Сложность:
7
Рейтинг:
5
Сложность:
7