我遇到一种情况,例如我正在开发宁静的Web服务,当我们收到对API的点击时,需要将消息推送到Kafka。
因此,根据Java Kafka文档,以下是程序
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer",
"org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer",
"org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
for (int i = 0; i < 100; i++)
producer.send(new ProducerRecord<String, String>("my-topic",
Integer.toString(i), Integer.toString(i)));
producer.close();
在上面的代码行中,仅一次创建了Producer实例 并使用同一实例在循环中将100条消息推送到Kafka。但是,在实现Restful API的过程中,我们不会大量获取消息。一次我们只会收到一条消息,因此每次创建新的Producer实例时,每次API命中都需要100毫秒的时间将消息推送到Kafka,这是不可接受的。
既然Restful Web服务是无状态的,那么我们如何只使用一个Producer实例呢?
谢谢。