一.问题描述
使用kafka prudercer api 进行消息写入过程中,程序运行不到一分钟就自动停止。重新启动,又可以进行运行。当时写入数据量较大,一分钟写入数据量为上万。一直找不出什么问题,查阅网上相关资料也没有任何解决方法。
二.问题所在
考虑到数据量较大,会不会是配置中内存设置过小,缓存满了导致自动关闭。通过修改配置,发现没有任何改观。跟踪代码,终于找到问题的原因。由于生产者一次连接,产生一个生产者,消息发送完毕,就进行关闭。产生生产者的时间大约需要几十ms,由于数据发送量较大,频繁的新建与关闭,导致关闭。
三.解决办法
针对一个服务,只产生一个生产者(考虑到改topic为单分区),生产者不进行关闭。如果为多分区,也可以考虑使用线程池,批量产生多个生产者。
四.解决具体实现
public abstract class ProducerAbstract {
Properties props= null;
static Map<String,Producer<String, String>> producerMap = new HashMap<String,Producer<String, String>>();
static Producer<String, String> producer = null;
//属性配置
void createProperties(String serversIps,String acks){
props = new Properties();
props.put("bootstrap.servers",serversIps);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apa