Кафка производитель плохая производительность
У меня проблема с производителем кафки. На самом деле я использую Spring Kafka и отправляю сообщения через KafkaTemplate следующим образом:
DefaultKafkaProducerFactory<K, V> defaultKafkaProducerFactory = new DefaultKafkaProducerFactory<>(producerParams);
KafkaTemplate kafkaTemplate = new KafkaTemplate<>(defaultKafkaProducerFactory);
RecordMetadata recordMetadata = kafkaTemplate.send(record).get().getRecordMetadata();
Проблема в том, что иногда отправка сообщения занимает 4-20 сек. Там много сообщений, на отправку которых уходит 100 мс. Поэтому у меня есть несколько вопросов:
Есть ли какая-либо связь между размером сообщения и пропускной способностью, какова связь?
Что я должен проверить в первую очередь, может быть, я плохо настроился, в любом направлении?
1 ответ
Хорошо, на самом деле проблема была в машинах, процессор был слишком высок, в менеджере Cloudera были логи
Обнаруженная пауза в JVM или хост-машине (например, остановка GC или JVM не запланированы): приостановлена примерно на 4332 мсек: GC не обнаружены.
Обнаруженная пауза в JVM или хост-машине (например, остановка GC в мире или JVM не запланирована): приостановлена приблизительно на 10827 мсек: у пула GC 'ConcurrentMarkSweep' имеется коллекция (и): count=1 раз =11107 мс
Когда я запускаю то же самое на машине с 8 ядрами - проблема исчезла. еще одна вещь, которая была рекомендована, это увеличение размера кучи Java брокера
Если у вас огромное количество данных, тогда производитель Kafka требует настройки производительности. В этом случае лучше настроить batch.size, linger.ms & buffer.memory. Обычно в kafka конфигурация batch.size по умолчанию составляет 16 Кбайт. Чтобы улучшить производительность, просто увеличьте batch.size.
props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16_384 * 4);
// Send with little bit buffering
props.put(ProducerConfig.LINGER_MS_CONFIG, 200);
//Use Snappy compression for batch compression.
props.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, "snappy");
С вышеуказанными конфигурациями производительность должна быть хорошей. Более подробную информацию вы найдете в ссылке ниже.