Apache kafka 多线程中的Kafka管理客户端
我有一个卡夫卡客户端,代码如下Apache kafka 多线程中的Kafka管理客户端,apache-kafka,Apache Kafka,我有一个卡夫卡客户端,代码如下 private AdminClient getKafkaClient() { final Map<String, Object> configs = new ConcurrentHashMap<>(); configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "server-ip"); return AdminClient.create(
private AdminClient getKafkaClient() {
final Map<String, Object> configs = new ConcurrentHashMap<>();
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "server-ip");
return AdminClient.create(configs);
}
private管理员客户端getKafkaClient(){
final Map configs=新的ConcurrentHashMap();
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,“服务器ip”);
返回AdminClient.create(配置);
}
此方法由多个线程调用,并创建多个管理客户端。所以我想保留一个实例并利用它
我读过一篇关于Singleton使用Holder类的文章,其url如下:
在我看来不错,当我尝试实现问题设置配置,但无法创建实例时。谁能就我的问题向我提出最好的建议
谢谢大家! 以下看起来不错??我成功了
public class KafkaAdminManager {
private ConnectionConfig connectionConfig;
private static final Map<String, Object> configs = new HashMap<>();
public KafkaAdminManager(ConnectionConfig connectionConfig) {
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, connectionConfig.getBootstrapServers());
this.connectionConfig = connectionConfig;
}
private static class InstanceHolder {
public static AdminClient instance = AdminClient.create(configs);
}
private KafkaAdminManager(){}
public static AdminClient getInstance() {
return InstanceHolder.instance;
}
}
公共类KafkaAdminManager{
私有连接配置连接配置;
私有静态最终映射configs=newhashmap();
公共KafkaAdminManager(连接配置连接配置){
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,connectionConfig.getbootstrapserver());
this.connectionConfig=connectionConfig;
}
私有静态类InstanceHolder{
publicstaticadminclient实例=AdminClient.create(configs);
}
私有KafkaAdminManager(){}
公共静态AdminClient getInstance(){
返回InstanceHolder.instance;
}
}
Singleton可以正常工作。您不需要并发Hashmap。请显示您的实际StackTrace可选,使用更高级别的框架,如Spring Kafka或Akka Streams,它可以为您注入单个实例下面的配置工作并设法运行。谢谢@cricket_007;您不一定需要两门课,但看起来不错。非常感谢您的反馈。