Ответ
Если в consumer group находится только один consumer, он будет получать сообщения из всех партиций топика, на который он подписан. В данном случае — из обеих.
Kafka гарантирует, что каждая партиция будет назначена ровно одному consumer в рамках одной группы. Поскольку consumer всего один, Kafka назначает ему все доступные партиции для обработки.
Ключевые моменты:
- Порядок сообщений: Порядок доставки сообщений гарантируется только в пределах одной партиции. Consumer будет получать сообщения из двух партиций вперемешку, но внутри каждой из них порядок будет сохранен.
- Масштабирование: Если добавить в ту же consumer group второго consumer, Kafka автоматически запустит процесс ребалансировки. В результате каждая партиция будет назначена одному из consumer (например,
consumer-1
получитpartition-0
, аconsumer-2
—partition-1
). - Производительность: Один consumer может стать «узким местом» (bottleneck), если он не успевает обрабатывать суммарный поток данных из всех назначенных ему партиций.
Пример кода на Python (kafka-python
):
from kafka import KafkaConsumer
# Этот consumer подпишется на обе партиции топика 'my-topic'
consumer = KafkaConsumer(
'my-topic',
bootstrap_servers='localhost:9092',
group_id='my-single-consumer-group'
)
for message in consumer:
# В выводе будут сообщения из partition 0 и 1
print(f"Partition: {message.partition}, Offset: {message.offset}, Value: {message.value.decode('utf-8')}")