Калькулятор партиций и хранилища Kafka
Сколько партиций нужно топику Kafka по пропускной способности, потребителям и сжатию, объём диска с репликацией и минимум брокеров.
Данные обрабатываются в браузере и никуда не отправляются
Ввод
Результат
Здесь появится результат
Введите данные слева - результат появится сразу
Как пользоваться
Введите поток данных (сообщений в секунду и их размер), скорость производителя и потребителя на одну партицию, число экземпляров потребителя, срок хранения, фактор репликации и степень сжатия - таблица покажет, сколько партиций нужно топику, сколько данных будет на диске и сколько брокеров потребуется как минимум. Для каждого показателя написано, как он считается.
Расчёт использует правило Confluent: число партиций - большее из двух значений (поток / скорость производителя на партицию и поток / скорость потребителя на партицию), но не меньше числа потребителей в группе. Скорости на партицию зависят от вашего оборудования и лучше всего измеряются тестом на ваших данных.
Частые ошибки
Вот что чаще всего забывают при выборе числа партиций Kafka:
Партиции можно добавлять, но не убирать
Уменьшить число партиций у существующего топика нельзя - только создать новый и перенести данные. Поэтому берите запас на рост нагрузки в 1,5-2 раза, но не множьте партиции «на всякий случай».
При добавлении партиций ломается порядок для ключей
Kafka направляет сообщения с одним ключом в одну партицию по хешу от числа партиций. Если число изменить, новые сообщения с тем же ключом попадут в другую партицию, и порядок обработки для ключа нарушится. Закладывайте нужное число сразу.
Потребителей в группе не больше партиций
Каждая партиция читается одним потребителем группы. Если экземпляров сервиса больше, чем партиций, лишние простаивают. Поэтому число партиций не должно быть меньше планируемого числа потребителей.
Слишком много партиций тоже плохо
Каждая партиция - это файлы, память и нагрузка на контроллер. Тысячи партиций на брокер замедляют восстановление после сбоя и выбор лидера, увеличивают задержки и использование дескрипторов файлов.
Фактор репликации и число брокеров
Реплик не может быть больше, чем брокеров. Для устойчивости обычно берут фактор 3 и min.insync.replicas = 2: запись подтверждается, когда она есть минимум на двух копиях. Репликация увеличивает и объём диска, и межброкерный трафик.
Retention считается по времени и по размеру
Хранение ограничивается сроком (retention.ms) и/или размером (retention.bytes) на партицию. Расчёт здесь по сроку; если задан и размер, данные могут удаляться раньше. Не забывайте про сжатие и «горячий» запас по месту на диске (не меньше 20-30 процентов).
Частые вопросы
Отправляются ли мои данные на сервер?
Нет - 100%. Сайт целиком статический, у него нет серверной части. Расчёты выполняются в вашем браузере, введённые числа никуда не отправляются.
По какой формуле считается число партиций?
Партиций = max(T / P, T / C), где T - целевая скорость потока, P - скорость производителя на одну партицию, C - скорость потребителя на одну партицию. Затем результат увеличивают до числа потребителей в группе. Это рекомендация Confluent, а не жёсткое правило.
Какие значения скорости на партицию брать?
У Confluent в примерах - около 10 МБ/с на производителя и 20 МБ/с на потребителя, но они сильно зависят от размера сообщения, сжатия, диска и обработки на стороне потребителя. Самый надёжный способ - измерить на своём стенде.
Можно ли потом изменить число партиций?
Увеличить - да, уменьшить - нет. При увеличении порядок сообщений с одним ключом нарушается для новых данных. Если порядок критичен, закладывайте число партиций с запасом сразу.
Сколько партиций на одного брокера допустимо?
Ориентир - не больше 4000 партиций (с учётом реплик) на брокера и не больше 200 000 на кластер для современных версий. Чем их больше, тем дольше восстановление после сбоя. Инструмент считает минимум брокеров по этому правилу.
Что даёт сжатие?
Сжатие (gzip, snappy, lz4, zstd) уменьшает объём на диске и в сети. Степень зависит от данных: JSON и текст сжимаются в 3-5 раз, уже сжатые данные почти не сжимаются. Введите свою степень сжатия, чтобы оценить диск.
Как выбрать фактор репликации?
Для продуктивных систем - 3: переживает отказ одного брокера без потерь данных и позволяет обслуживать второй. Для разработки и тестов - 1. Фактор не может быть больше числа брокеров.
Влияет ли ключ сообщения на число партиций?
Ключ определяет партицию (хеш от ключа по модулю числа партиций) и гарантирует порядок внутри ключа. Если ключей мало или они распределены неравномерно, часть партиций перегружена, а остальные простаивают - число партиций тогда не поможет.
Похожие инструменты
Курс «Проектирование API и интеграций»
Глубокое погружение в REST, gRPC, SOAP, проектирование баз данных и брокеры сообщений (Kafka, RabbitMQ). Делегирование рутины нейросетям (ИИ). Перестанете бояться технических собеседований и начнете говорить с разработчиками на одном языке. Курс собран так, чтобы пробить зарплатный потолок и вырасти в грейде - ученики тому подтверждение.
Перейти к курсу на Stepik