К тренажеру
ВопросMediumbackend-system-calculationsEasyOffer

Kafka partitions и время обработки consumer group

В Kafka topic 10 partitions и 100 задач: 90 задач по 90 ms и 10 задач по 1 s. Задачи равномерно лежат по partitions, внутри partition порядок последовательный. Как оценить best/worst completion time для 1, 10 и 20 consumers?

Короткий ответ

Для 1 consumer вся работа последовательна: 90 * 0.09 + 10 * 1 = 18.1 s. Для 10 consumers best case 1.81 s, если долгие задачи распределены по одной на partition; worst case 10 s, если все долгие задачи попали в одну partition. Для 20 consumers так же, потому что partitions всего 10.

Полный разбор

Сначала считаем суммарную работу: 90 быстрых задач по 0.09 секунды дают 8.1 секунды, 10 долгих задач по 1 секунде дают 10 секунд. Всего 18.1 секунды последовательной работы.

При 1 consumer все partitions фактически обрабатываются одним worker-ом, поэтому best и worst одинаковые: 18.1 секунды.

При 10 consumers каждая partition может получить своего consumer-а. Best case: долгие задачи распределены равномерно, по одной на partition. Тогда каждая partition занимает 1 + 9 * 0.09 = 1.81 секунды, и вся группа заканчивает за 1.81 секунды. Worst case: все 10 долгих задач попали в одну partition; эта partition становится bottleneck и занимает 10 секунд.

При 20 consumers результат не улучшается: одна partition назначается максимум одному consumer-у, поэтому полезный параллелизм ограничен 10 partitions.

Теория

В Kafka consumer group максимальный полезный параллелизм ограничен числом partitions. Время завершения определяется самой медленной назначенной partition.

Типичные ошибки

  • Думать, что 20 consumers ускорят topic с 10 partitions.
  • Делить суммарную работу на consumers, игнорируя sequential order внутри partition.
  • Не различать best и worst distribution долгих задач по partitions.

Как отвечать на собеседовании

  • Сначала проговори ограничение one partition -> one consumer within group.
  • Best/worst объясняй через makespan самой медленной partition.