Kafka 消费者客户端创建单例实例 vs 静态方法

sid*_*dss 2 java design-patterns apache-kafka kafka-consumer-api

请说出哪一种是创建 Kafka 消费者客户端的最佳实践。

public class KafkaConsumerFactory {

public static createKafKafkaConsumer(){
       KafkaConsumer consumer = new KafkaConsumer<   (getKafkaConsumerProperties());
      consumer.subscribe(Collections.Singleton.(getTopic()));
      return consumer;
}
Run Code Online (Sandbox Code Playgroud)

或者

public class KafkaConsumerFactory {

private static KafkaConsumer consumer;  

@Synchronized
public static KafkaConsumer createKafKafkaConsumer(){

if(consumer = null)
    {
      consumer = new KafkaConsumer< (getKafkaConsumerProperties());
      consumer.subscribe(Collections.Singleton.(getTopic()));
    }

 return consumer;
}
}
Run Code Online (Sandbox Code Playgroud)

在生产环境中使用单例 Kafka 消费者客户端会有什么可观的好处吗?

sid*_*dss 6

Kafka Consumer 不是线程安全的,所以它不应该是单例。但是在 Producer 的情况下,因为它是线程安全的,建议使用单个实例。