记一次kafka producer 自动停止之坑

该博客主要讨论了在使用 Kafka 的 Producer API 进行大量数据写入时遇到的问题,即程序因频繁创建和关闭生产者而导致自动停止。作者通过分析确认了问题原因,并提出了解决方案:保持一个持久化的生产者实例或者使用线程池来批量管理生产者。文章提供了一个优化后的生产者抽象类示例,展示了如何改进生产者管理以提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.问题描述

  使用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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值