Как рассчитать, сколько памяти нужно Kafka Broker?
Как рассчитать, сколько памяти требуется Kafka Broker, учитывая пропускную способность, средний размер сообщения и время хранения.
Я спрашиваю, как я вижу в нашей системе мониторинга, что после запуска брокер Kafka линейно увеличивает используемую кучу JVM. В какой-то момент мы получили OutOfMemoryError.
Мы расширяем JVM Heap пару раз, и проблема остается.
Так что было бы лучше не догадываться, что нужно Кафке, экспериментируя, а посчитав значение:-).
1 ответ
Трудно рассчитать точное значение, но вы можете использовать эмпирическое правило из документации Kafka:
Вам нужно достаточно памяти для буферизации активных читателей и писателей. Вы можете выполнить оценку потребностей памяти за пределами конверта, предполагая, что вы хотите иметь возможность буферизовать в течение 30 секунд и вычислить потребность в памяти как write_throughput*30.
Также с 1.0.0 вы можете использовать queued.max.request.bytes
ограничить объем памяти, который брокеры могут использовать для входящих запросов. Это может помочь вам избежать OOM, и если вы можете контролировать его использование с:
kafka.network:type=SocketServer,name=MemoryPoolAvailable
kafka.network:type=SocketServer,name=MemoryPoolUsed
Это должно позволить вам определить, сколько памяти требует ваша рабочая нагрузка без особых проблем.