Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实现与jdbc连接池相同的kafka连接池_Java_Apache Kafka_Connection Pooling - Fatal编程技术网

Java 如何实现与jdbc连接池相同的kafka连接池

Java 如何实现与jdbc连接池相同的kafka连接池,java,apache-kafka,connection-pooling,Java,Apache Kafka,Connection Pooling,我有一个卡夫卡制作人类,用 每次初始化连接,这是一个耗时的过程, 所以为了更快,我想实现卡夫卡连接 联营。我寻找了很多解决方案,但没有找到正确的 一个。请将我重定向到正确的解决方案。谢谢。我的卡夫卡制作人 课程为: import java.util.Properties; 导入org.apache.log4j.Logger; 导入com.bisil.report.queue.QueueDBFeederService; 导入kafka.javaapi.producer.producer; 导入ka

我有一个卡夫卡制作人类,用 每次初始化连接,这是一个耗时的过程, 所以为了更快,我想实现卡夫卡连接 联营。我寻找了很多解决方案,但没有找到正确的 一个。请将我重定向到正确的解决方案。谢谢。我的卡夫卡制作人 课程为:

import java.util.Properties;
导入org.apache.log4j.Logger;
导入com.bisil.report.queue.QueueDBFeederService;
导入kafka.javaapi.producer.producer;
导入kafka.producer.KeyedMessage;
导入kafka.producer.ProducerConfig;
@抑制警告(“弃用”)
公共类KafkaProducer1实现ProducerService{
私人静电生产者;
私有静态最终字符串topic=“mytopic1”;
私有Logger=Logger.getLogger(KafkaProducer1.class);
@凌驾
公共无效初始化(){
试一试{
Properties producerProps=新属性();
producerProps.put(“metadata.broker.list”,“192.168.21.182:9092”);
producerProps.put(“serializer.class”、“kafka.serializer.StringEncoder”);
producerProps.put(“请求.必需.确认”,“1”);
PRODUCTERCONFIG PRODUCTERCONFIG=新PRODUCTERCONFIG(PRODUCTERPROPS);
生产者=新生产者(生产者配置);
}捕获(例外e){
logger.错误(“向服务器发送数据时出现异常”+e,e);
}
logger.info(“测试消息”);
}
@凌驾
public void publishMessage(字符串jsonPacket){
KeyedMessage keyedMsg=新的KeyedMessage(主题,jsonPacket);
制作人发送(keyedMsg);
//这将发布关于给定主题的消息
}
@凌驾
public void callMessage(字符串jsonPacket){
初始化();
//发布消息
publishMessage(jsonPacket);
//关闭制作人
producer.close();
}
}

您可以将所有消息放入数组中,以迭代方式将其发布到topic,然后在完成后关闭producer。这样只会调用一次初始化和一次close或destroy。您可以执行以下操作

String[] jsonPacket///  your message array
 for (long i = 0; i < jsonPacket.length; i++) {
            producer.send(new KeyedMessage<Integer, String>(topic, jsonPacket[i]));
        }
        producer.close();
String[]jsonPacket///您的消息数组
for(长i=0;i
如果我的理解是正确的,您需要一个生产者对象池,当新的发布请求发生时,该对象池始终可用,并在任务完成时等待其他请求,您的需求可能与“对象池”(java中带有执行者框架(池)的对象工厂)匹配这是由Apache commons实现的,因为您需要从池中获取KafkaProducer对象。对象池概念,在apache commons jar中实现并可用。

在初始化方法中,您可以检查生产者是否已经存在,如果已经初始化,则返回。完成所有处理/应用程序关闭后关闭生产者。我建议最好的方法是,使用依赖项容器并使用依赖项注入注入singleton producer。实际上,场景是我有一个表单,当我创建一个新的或更新现有的表单时,不连续地,数据存储在jsonPacket(单变量)中,那么,你的建议对我的场景有效吗?啊……在这种情况下,你可以查看kaushal的答案。你也可以每隔几秒钟更新一次应用程序,然后写信给kafka topic。您需要根据您的应用程序设计进行试验
String[] jsonPacket///  your message array
 for (long i = 0; i < jsonPacket.length; i++) {
            producer.send(new KeyedMessage<Integer, String>(topic, jsonPacket[i]));
        }
        producer.close();