Вопрос проверяет понимание механизма consumer group и распределения нагрузки между consumer’ами.
Сообщения распределяются между consumer’ами через partition’ы. Каждый partition назначается ровно одному consumer’у внутри consumer group. Consumer читает все сообщения из своих partition’ов последовательно. Kafka не распределяет отдельные сообщения между consumer’ами напрямую. Распределение происходит на уровне partition’ов.
Kafka распределяет нагрузку не по сообщениям, а по partition’ам. Это фундаментальный принцип архитектуры Kafka.
Consumer Group — это набор consumer’ов, которые совместно читают один или несколько topic’ов.
Основные правила:
Один partition → один consumer в группе
Один consumer может читать несколько partition’ов
Сообщения из partition читаются последовательно
Процесс выглядит так:
Consumer’ы объединяются в группу
Kafka определяет список partition’ов topic’а
Partition’ы распределяются между consumer’ами
Kafka никогда:
не делит один partition между несколькими consumer’ами
не балансирует нагрузку на уровне отдельных сообщений
Если:
topic имеет 4 partition’а
consumer group состоит из 2 consumer’ов
То:
каждый consumer получит по 2 partition’а
обработка будет идти параллельно
Распределение сообщений в Kafka происходит через назначение partition’ов consumer’ам внутри группы, что упрощает модель обработки и гарантирует порядок сообщений.