说明: 使用 kafka官方生产者的 java 程序 发送消息时,若 kafka集群宕机,或者网络中断,生产者会高频率地报出 java.net.ConnectException 。好像是在不断地重试连接。 问题: 请问这个重试起什么作用?会不会很消耗资源? 我不想让生产者自动重试,请问该怎么关闭呢?
这种属于正常的错误(尝试治愈),不属于致命错误(无法恢复),所以会一直重试链接,性能不会受影响,只是重试,日志刷的有些刺眼。
如果你不需要,捕获它,关闭生产者类,有个close方法
非常感谢。
我尝试过捕捉该异常,但是不知道为什么,代码:try {..producer.send(reocor).get()...}catch(Exception e),结果无法捕获到 ConnectException ,却捕到一个 ExecutionException。经过测试,我想这应该是 生产者在达到 max.block.ms 时抛出的异常。
因为我想要 在无法向集群发送数据 的时候,让生产者程序休息一会,所以请问大神,可以根据 是否捉到 ExecutionException 来 判断吗?
我建议你忽视它,休息没有必要的,不会影响性能的。
因为如果你想捕获异常,如果你是异步提交,异常只能通过callback获取,而且这个callback还是多线程的,只有同步发送,你才能捕获异常。
我想想这个逻辑就很麻烦,其实集群几乎是稳定的,即使出问题也是短暂的时间,而为了这短暂的时间,写了那么多复杂的逻辑,反而增加了更多不稳定性。
你的答案