【发布时间】:2021-07-05 21:57:34
【问题描述】:
正如Kafka文档所说,
生产者是线程安全的并且共享一个生产者实例 跨线程通常比拥有多个线程更快 实例。
所以我有以下代码,并且希望每个发送请求只有一个 KafkaProducer 实例。但是什么时候是代码中调用 close 方法的最佳位置呢?因为我不能在 send 方法中调用 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);
}
}
【问题讨论】:
标签: apache-kafka kafka-producer-api