Перейти к основному содержимому

Apache Kafka

Заметки о работе с Kafka, моменты которые не понимал решил записать

Партиции и консьюмеры

Видимость сообщений по партициям

Вопрос: Каждый консьюмер видит не все сообщения в топике, а только ту часть, которая попала в его партицию?

Ответ: Да, это корректное понимание. В рамках одной консьюмер-группы каждый консьюмер читает только из назначенных ему партиций топика.

Ключевые моменты:

  • Если количество консьюмеров равно количеству партиций, то каждый консьюмер обрабатывает одну партицию
  • Консьюмер не видит сообщения из других партиций, которые ему не назначены
  • Это обеспечивает масштабируемость и параллельную обработку данных

Преимущества:

  • Балансировка нагрузки между консьюмерами
  • Распределенная обработка данных
  • Повышение производительности системы

Распределение партиций при изменении количества консьюмеров

Вопрос: Как работает распределение партиций при добавлении новых консьюмеров в группу?

Ответ: При добавлении консьюмеров в группу происходит автоматическое перераспределение партиций (rebalancing).

Пример с 3 партициями:

  • 1 консьюмер (c1): читает из всех 3 партиций
  • 2 консьюмера (c1, c2): c1 читает из партиций 1-2, c2 из партиции 3
  • 3 консьюмера (c1, c2, c3): каждый читает из одной партиции (идеальное распределение)
  • 4 консьюмера (c1, c2, c3, c4): c4 остается неактивным

Важно:

  • Внутри одной консьюмер-группы партиции назначаются уникально
  • Это предотвращает повторную обработку сообщений
  • Для активации лишних консьюмеров нужно увеличить количество партиций в топике

Обеспечение видимости всех сообщений

Вопрос: Как сделать так, чтобы все консьюмеры видели все сообщения в топике?

Ответ: Для этого консьюмеры должны принадлежать разным консьюмер-группам.

Решения:

  1. Разные консьюмер-группы - каждая группа независимо читает все сообщения из топика
  2. Отдельные топики - создавать разные топики для разных типов сообщений

Управление жизненным циклом сообщений

Вопрос: Что происходит с сообщениями, которые прочитали не все консьюмеры, особенно при поиске по UUID?

Ответ: Сообщения в Kafka не удаляются после прочтения консьюмерами.

Механизм работы:

  • Сообщения хранятся в топике независимо от того, сколько раз и кем они были прочитаны
  • Удаление происходит только по истечении времени retention (время жизни)
  • Kafka автоматически очищает устаревшие сообщения

Рекомендации для разнотипных событий:

  1. Создавайте отдельные топики для каждого типа сообщений
  2. Используйте разные консьюмер-группы для разных типов обработки
  3. Избегайте хранения разнотипных данных в одной партиции

Лучшие практики

Планирование архитектуры

  1. Разделение по типам данных

    • Отдельные топики для разных типов событий
    • Четкое разграничение ответственности
  2. Масштабирование

    • Планируйте количество партиций с учетом максимального количества консьюмеров
    • Учитывайте, что количество партиций нельзя уменьшить без пересоздания топика
  3. Группировка консьюмеров

    • Используйте консьюмер-группы для обеспечения отказоустойчивости
    • Разные группы для независимой обработки одних и тех же данных

Мониторинг и оптимизация

  • Отслеживайте lag консьюмеров
  • Контролируйте распределение нагрузки по партициям
  • Настраивайте retention period в соответствии с требованиями бизнеса