Сколько памяти нужно кластеру Kafka?

Как я могу рассчитать, сколько памяти и ЦП требуется моему кластеру Kafka? Мой кластер состоит из 3 узлов с пропускной способностью ~ 800 сообщений в секунду.

В настоящее время у них есть (каждый) 6 ГБ оперативной памяти, 2 процессора, 1 ТБ диск, и этого, похоже, недостаточно. Сколько бы вы выделили?

Кажется, недостаточно, на основании чего? Ты кучу мониторишь? Насколько велики фактические сообщения? Кроме того, stackoverflow.com предназначен для вопросов по программному обеспечению / программированию. Это, наверное, лучше спросить на ServerFault

OneCricketeer 17.12.2018 16:34
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Apache Kafka - популярная платформа распределенной потоковой передачи данных, которую можно использовать для построения конвейеров данных в реальном...
5
1
9 583
2

Ответы 2

Я думаю, вы хотите начать с профилирования своего кластера kafka.

См. Ответ на этот пост: Брокеры Kafka для профилирования процессора.

Он в основном рекомендует вам использовать стек прометея и графаны для визуализации вашей нагрузки на временной шкале - по этому вы сможете определить свое узкое место. И ссылки на статью, в которой описано, как это сделать.

Кроме того, вам может показаться интересным пост, потому что у постера примерно такая же нагрузка, как и на вас.

Вам нужно будет предоставить более подробную информацию о вашем варианте использования, например о среднем размере сообщений и т. д., Но все равно вот мои 2 цента:

Документация Confluent может пролить свет:

CPUs
Most Kafka deployments tend to be rather light on CPU requirements. As such, the exact processor setup matters less than the other resources. Note that if SSL is enabled, the CPU requirements can be significantly higher (the exact details depend on the CPU type and JVM implementation).

You should choose a modern processor with multiple cores. Common clusters utilize 24 core machines.

If you need to choose between faster CPUs or more cores, choose more cores. The extra concurrency that multiple cores offers will far outweigh a slightly faster clock speed.

Как рассчитать пропускную способность
Также может быть полезно вычислить пропускную способность. Например, если у вас 800 сообщений в секунду по 500 байтов каждое, то ваша пропускная способность будет 800*500/(1024*1024) = ~0.4MB/s. Теперь, если ваша тема разделена на разделы и у вас есть 3 работающих брокера с 3 репликами, это приведет к 0.4/3*3=0.4MB/s на каждого брокера.

Более подробную информацию о вашей архитектуре можно найти в техническом документе Confluent Apache Kafka и эталонная архитектура Confluent. Вот раздел использования памяти,

ZooKeeper uses the JVM heap, and 4GB RAM is typically sufficient. Too small of a heap will result in high CPU due to constant garbage collection while too large heap may result in long garbage collection pauses and loss of connectivity within the ZooKeeper cluster.

Kafka brokers use both the JVM heap and the OS page cache. The JVM heap is used for replication of partitions between brokers and for log compaction. Replication requires 1MB (default replica.max.fetch.size) for each partition on the broker. In Apache Kafka 0.10.1 (Confluent Platform 3.1), we added a new configuration (replica.fetch.response.max.bytes) that limits the total RAM used for replication to 10MB, to avoid memory and garbage collection issues when the number of partitions on a broker is high. For log compaction, calculating the required memory is more complicated and we recommend referring to the Kafka documentation if you are using this feature. For small to medium-sized deployments, 4GB heap size is usually sufficient. In addition, it is highly recommended that consumers always read from memory, i.e. from data that was written to Kafka and is still stored in the OS page cache. The amount of memory this requires depends on the rate at this data is written and how far behind you expect consumers to get. If you write 20GB per hour per broker and you allow brokers to fall 3 hours behind in normal scenario, you will want to reserve 60GB to the OS page cache. In cases where consumers are forced to read from disk, performance will drop significantly

Kafka Connect itself does not use much memory, but some connectors buffer data internally for efficiency. If you run multiple connectors that use buffering, you will want to increase the JVM heap size to 1GB or higher.

Consumers use at least 2MB per consumer and up to 64MB in cases of large responses from brokers (typical for bursty traffic). Producers will have a buffer of 64MB each. Start by allocating 1GB RAM and add 64MB for each producer and 16MB for each consumer planned.

При настройке конфигурации вашей архитектуры необходимо учитывать множество различных факторов. Я бы посоветовал просмотреть вышеупомянутую документацию, отслеживать существующий кластер и ресурсы и, наконец, настроить их соответствующим образом.

Другие вопросы по теме