Вопрос проверяет понимание механизма масштабирования потребления сообщений в Kafka через группы консюмеров.
Kafka использует модель логов с партициями. Один топик может состоять из нескольких партиций, каждая из которых хранит упорядоченную последовательность сообщений. Когда несколько консюмеров подписываются на один топик в рамках одной группы, Kafka автоматически распределяет партиции между ними. Каждая партиция назначается ровно одному консюмеру в группе, что гарантирует порядок сообщений внутри партиции и позволяет параллельно обрабатывать разные партиции.
Чтобы увеличить пропускную способность, необходимо:
Пример конфигурации консюмера на Python с использованием библиотеки confluent-kafka:
from confluent_kafka import Consumer
conf = {
'bootstrap.servers': 'localhost:9092',
'group.id': 'my-group',
'auto.offset.reset': 'earliest'
}
consumer = Consumer(conf)
consumer.subscribe(['my-topic'])
while True:
msg = consumer.poll(1.0)
if msg is None:
continue
if msg.error():
print(f"Error: {msg.error()}")
continue
print(f"Received: {msg.value().decode('utf-8')}")
Запустив несколько таких консюмеров с одинаковым group.id, каждый будет обрабатывать свою партицию.
Использование групп консюмеров с достаточным количеством партиций — основной способ горизонтального масштабирования потребления в Kafka. Это позволяет линейно увеличивать пропускную способность при росте нагрузки.