Насколько мне известно, KafkaProducer является поточно-ориентированным, и совместное использование одного экземпляра производителя между потоками, как правило, будет быстрее, чем наличие нескольких экземпляров.
Но метод send является асинхронным (если вы не вызываете .get () в объекте Future, возвращаемом методом send, что не рекомендуется, таким образом вы будете ожидать каждую отправку и, следовательно, обрабатывать их синхронно).
Из-за документации производитель состоит из пулабуферного пространства, в котором хранятся записи, которые еще не были переданы на сервер, а также фоновый поток ввода-вывода, который отвечает за превращение этих записей в запросы и передачу их в кластер .Невозможность закрыть производителя после использования приведет к утечке этих ресурсов.
Похоже, что метод send фактически использует фоновый поток для преобразования вашей записи и отправки ее в кластер.
Вы действительно закрываетепроизводитель в конце?
producer.flush();
producer.close();
Метод close сериализатора вызывается, когда сеанс Kafka должен быть закрыт.Я предполагаю, что вы можете попытаться выполнить дополнительную очистку в методе close сериализатора или отметить его как пригодный для сбора мусора.