Вопрос проверяет понимание фундаментального принципа организации потребителей в Kafka, который обеспечивает параллельную обработку и гарантирует порядок.
Из одной партиции может читать ровно один потребитель (consumer) из данной потребительской группы (consumer group). Это фундаментальное правило Kafka, необходимое для гарантии порядка обработки сообщений в пределах одной партиции. Если потребителей в группе больше, чем партиций, «лишние» потребители будут простаивать.
Это правило — краеугольный камень модели потребления в Kafka.
Почему только один потребитель на партицию?
Гарантия порядка сообщений (Order Guarantee):
Сообщения в партиции хранятся в строгом порядке их добавления (по offset).
Если бы несколько потребителей читали из одной партиции параллельно, они бы обрабатывали сообщения в разном темпе и порядке. Это нарушило бы исходный порядок сообщений.
Назначение одной партиции только одному потребителю гарантирует, что сообщения из этой партиции будут обрабатываться последовательно.
Механизм реализации:
Каждая потребительская группа координатором назначает своим потребителям подписку на определенные партиции (процесс rebalance).
Координатор следит за тем, чтобы каждая партиция топика была назначена ровно одному потребителю в рамках одной группы.
Что это значит на практике?
Максимальный параллелизм потребления из топика для одной группы равен количеству партиций в этом топике.
Если в группе 3 потребителя, а в топике 2 партиции, то только 2 потребителя будут работать, а третий будет бездействовать (idle).
Если в группе 1 потребитель, а в топике 3 партиции, то этот один потребитель будет читать данные со всех трех партиций последовательно.
Пример:
У нас есть топик orders с 3 партициями (P0, P1, P2).
Группа notification-service имеет 3 потребителя (C1, C2, C3). Каждому будет назначена своя партиция: C1->P0, C2->P1, C3->P2. Параллелизм максимален.
Группа analytics-service имеет 1 потребитель. Ему будут назначены все три партиции (P0, P1, P2). Он будет читать их все, но порядок сообщений между партициями не гарантирован.
Вывод: Один потребитель на партицию — это осознанное архитектурное решение Kafka, которое жертвует избыточностью потребителей в обмен на строгое соблюдение порядка обработки сообщений в пределах партиции.