Ответ
Consumer Group (Группа потребителей) в Apache Kafka — это ключевой механизм для масштабирования обработки сообщений и обеспечения отказоустойчивости.
Основная идея заключается в том, что несколько процессов-потребителей (consumers) объединяются в одну группу для совместного чтения сообщений из одного или нескольких топиков (topics).
Принцип работы
-
Распределение нагрузки: Каждая партиция (partition) топика назначается только одному потребителю внутри группы. Это гарантирует, что каждое сообщение будет обработано ровно один раз в рамках данной группы.
-
Параллельная обработка: Если в топике 4 партиции, а в группе 4 потребителя, то каждый потребитель будет обрабатывать сообщения из своей уникальной партиции. Это позволяет распараллелить обработку и значительно увеличить пропускную способность.
-
Отказоустойчивость (Rebalancing): Если один из потребителей в группе выходит из строя, Kafka автоматически перераспределяет его партиции между оставшимися активными потребителями в группе. Этот процесс называется ребалансировкой.
Пример на Python (kafka-python)
from kafka import KafkaConsumer
# Все потребители, указавшие один и тот же 'group_id',
# будут работать в одной группе и распределять партиции между собой.
consumer = KafkaConsumer(
'user-events', # Название топика
bootstrap_servers='localhost:9092',
group_id='event-processing-group', # Идентификатор группы
auto_offset_reset='earliest' # Начать чтение с самого начала
)
print("Ожидание сообщений...")
for message in consumer:
# message.partition - партиция, из которой пришло сообщение
# message.offset - смещение сообщения в партиции
print(f"Partition: {message.partition}, Offset: {message.offset}, Value: {message.value.decode('utf-8')}")
Важные моменты
- Если количество потребителей в группе превышает количество партиций в топике, часть потребителей будет простаивать.
- Для увеличения параллелизма необходимо увеличивать количество партиций в топике.