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 остается неактивным
Важно:
- Внутри одной консьюмер-группы партиции назначаются уникально
- Это предотвращает повторную обработку сообщений
- Для активации лишних консьюмеров нужно увеличить количество партиций в топике
Обеспечение видимости всех сообщений
Вопрос: Как сделать так, чтобы все консьюмеры видели все сообщения в топике?
Ответ: Для этого консьюмеры должны принадлежать разным консьюмер-группам.
Решения:
- Разные консьюмер-группы - каждая группа независимо читает все сообщения из топика
- Отдельные топики - создавать разные топики для разных типов сообщений
Управление жизненным циклом сообщений
Вопрос: Что происходит с сообщениями, которые прочитали не все консьюмеры, особенно при поиске по UUID?
Ответ: Сообщения в Kafka не удаляются после прочтения консьюмерами.
Механизм работы:
- Сообщения хранятся в топике независимо от того, сколько раз и кем они были прочитаны
- Удаление происходит только по истечении времени retention (время жизни)
- Kafka автоматически очищает устаревшие сообщения
Рекомендации для разнотипных событий:
- Создавайте отдельные топики для каждого типа сообщений
- Используйте разные консьюмер-группы для разных типов обработки
- Избегайте хранения разнотипных данных в одной партиции