kafka 生产者 ConnectException

夏天 发表于: 2020-11-12   最后更新时间: 2020-11-12  

说明

  • 使用 kafka官方生产者的 java 程序 发送消息时,若 kafka集群宕机,或者网络中断,生产者会高频率地报出 java.net.ConnectException 。好像是在不断地重试连接。

问题

  1. 请问这个重试起什么作用?会不会很消耗资源?
  2. 我不想让生产者自动重试,请问该怎么关闭呢?


您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: kafka如何同步分区的消息数量?
下一条: kafka如何解读日志文件?

  • 这种属于正常的错误(尝试治愈),不属于致命错误(无法恢复),所以会一直重试链接,性能不会受影响,只是重试,日志刷的有些刺眼。

    如果你不需要,捕获它,关闭生产者类,有个close方法

    • 非常感谢。
      我尝试过捕捉该异常,但是不知道为什么,代码:try {..producer.send(reocor).get()...}catch(Exception e),结果无法捕获到 ConnectException ,却捕到一个 ExecutionException。经过测试,我想这应该是 生产者在达到 max.block.ms 时抛出的异常。
      因为我想要 在无法向集群发送数据 的时候,让生产者程序休息一会,所以请问大神,可以根据 是否捉到 ExecutionException 来 判断吗?

        • 我建议你忽视它,休息没有必要的,不会影响性能的。
          因为如果你想捕获异常,如果你是异步提交,异常只能通过callback获取,而且这个callback还是多线程的,只有同步发送,你才能捕获异常。

          我想想这个逻辑就很麻烦,其实集群几乎是稳定的,即使出问题也是短暂的时间,而为了这短暂的时间,写了那么多复杂的逻辑,反而增加了更多不稳定性。