Как сказано в документе Кафки,
Производитель является потокобезопасным, и совместное использование одного экземпляра производителя между потоками, как правило, будет быстрее, чем наличие нескольких экземпляров.
Итак, у меня есть следующий код, и я хочу иметь только один экземпляр KafkaProducer для каждого запроса на отправку. Но в каком месте кода лучше всего вызывать для него метод close? Поскольку я не могу вызвать метод close в методе отправки. Как мне написать код для обработки?
public class Producer {
private final KafkaProducer<Integer, String> producer;
public Producer(String topic, Boolean isAsync) {
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, KafkaProperties.KAFKA_SERVER_URL + ":" + KafkaProperties.KAFKA_SERVER_PORT);
props.put(ProducerConfig.CLIENT_ID_CONFIG, "DemoProducer");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, IntegerSerializer.class.getName());
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
producer = new KafkaProducer<>(props);
}
public void send(String message) {
producer.send(new ProducerRecord<>(topic, messageNo, messageStr);
}
}