Как влияет соотношение партиций и консьюмеров на обработку сообщений в Kafka
Kafkaконсьюмерыобработка сообщенийпартициипроизводительность
Что проверяют
Понимаете ли вы, что параллелизм чтения ограничен числом партиций, и знаете ли, что происходит при перекосе в любую сторону.
Как отвечать
Правило простое: внутри одной группы потребителей каждая партиция закреплена ровно за одним потребителем, а один потребитель может читать несколько партиций.
Отсюда три случая:
- потребителей меньше, чем партиций: нормальная ситуация, каждый читает по несколько партиций, нагрузка распределена;
- поровну: максимальный параллелизм, по партиции на потребителя;
- потребителей больше, чем партиций: лишние простаивают. Добавлять их бессмысленно, сначала нужно увеличивать число партиций.
Что стоит добавить, это отличает практический ответ:
- перебалансировка: при добавлении или падении потребителя закрепление пересчитывается, и на это время обработка приостанавливается. Частые перезапуски означают постоянные паузы, поэтому важны настройки таймаутов сессии и опроса;
- порядок: он сохраняется в пределах партиции, поэтому события одной сущности отправляют с одним ключом, иначе параллельная обработка перепутает их;
- отставание: ключевая метрика это разрыв между последним записанным и последним обработанным смещением. Растущее отставание при простаивающих потребителях означает, что упёрлись в число партиций;
- число партиций легко увеличить и невозможно уменьшить, а увеличение меняет распределение ключей, поэтому его закладывают с запасом;
- параллелизм внутри потребителя: обработку можно распараллелить в приложении, но тогда придётся самому следить за порядком и фиксацией смещений.
Где спотыкаются
Добавляют потребителей для ускорения, не увеличив партиции, и не понимают, почему ничего не изменилось.
Фиксируют смещение до обработки и теряют сообщения при падении.
Не смотрят на отставание и узнают о проблеме от пользователей.