kafka 生产者 ConnectException

夏天 发表于: 2020-11-12   最后更新时间: 2020-11-12 11:04:31   1,169 游览

说明

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

问题

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

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

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

夏天 -> 半兽人 4年前

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

半兽人 -> 夏天 4年前

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

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

你的答案

查看kafka相关的其他问题或提一个您自己的问题