Проверяет понимание модели распределения партиций между консьюмерами внутри одной consumer group в Kafka, что критично для проектирования масштабируемых и отказоустойчивых систем.
Kafka использует модель, в которой единицей параллелизма является не топик, а партиция. Топик делится на N партиций, и внутри одной consumer group каждая партиция закрепляется ровно за одним consumer'ом. Это гарантирует, что сообщения из одной партиции обрабатываются последовательно и одним потребителем, что упрощает работу с offset'ами и порядком сообщений.
Распределение выполняет Group Coordinator (один из брокеров) с помощью стратегии assignor (Range, RoundRobin, Sticky, CooperativeSticky). Правила простые:
Топик с 4 партициями и 2 consumer'ами в группе: каждый получит по 2 партиции. Если добавить третьего consumer'а, произойдёт rebalance, и партиции перераспределятся (например, 2-1-1). Если consumer'ов станет 5, один будет простаивать.
// Пример конфигурации consumer'а
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "order-service");
props.put("key.deserializer", StringDeserializer.class);
props.put("value.deserializer", StringDeserializer.class);
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(List.of("orders"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> r : records) {
process(r); // обработка сообщения
}
consumer.commitSync(); // фиксация offset'ов
}
Когда consumer присоединяется, выходит или считается мёртвым (по session.timeout.ms), координатор запускает rebalance. Во время rebalance потребление останавливается (в eager-протоколе), что может вызывать задержки. CooperativeSticky assignor минимизирует остановки, перераспределяя только затронутые партиции.
Итог: consumer group — это механизм горизонтального масштабирования чтения из Kafka, где партиции делятся между участниками группы. Применяйте его, когда нужно параллельно обрабатывать поток сообщений, сохраняя порядок внутри партиции и автоматически перераспределяя нагрузку при сбоях.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию