2018-04-23 15:05:05.780-[ERROR]-[Thread-0]-com.clickplus.canal.AbstractCanalClientTest:151-process error! com.alibaba.otter.canal.protocol.exception.CanalClientException: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。
at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.ack(SimpleCanalConnector.java:257) ~[canal.client-1.0.4.jar:na] at com.clickplus.canal.AbstractCanalClientTest.process(AbstractCanalClientTest.java:143) ~[classes/:na] at com.clickplus.canal.AbstractCanalClientTest$2.run(AbstractCanalClientTest.java:86) [classes/:na] at java.lang.Thread.run(Thread.java:722) [na:1.7.0_17] Caused by: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。 at sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:1.7.0_17] at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51) ~[na:1.7.0_17] at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:94) ~[na:1.7.0_17] at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[na:1.7.0_17] at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:450) ~[na:1.7.0_17] at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.writeWithHeader(SimpleCanalConnector.java:289) ~[canal.client-1.0.4.jar:na] at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.ack(SimpleCanalConnector.java:253) ~[canal.client-1.0.4.jar:na] ... 3 common frames omitted
小数据量时,canal运行是没有问题的,当有大事务执行时(千级万级的insert),就会报这个错误,调大了buffersize和客户端的batchsize都没什么用
原提问者GitHub用户gurenyuan123
我之前处理数据时也遇到过这种问题。
1、使用场景
我使用的是canal 1.0.25,客户端采用定时任务实时处理canal服务端获取的日志数据,并且每个定时任务都是使用同一个客户端链接对象。数据库瞬间更新1w条数据时,canal客户端处理数据时,运行一会就会一直报你说的这种错误——“Caused by: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。”
2、解决办法
每个定时任务都使用新创建的客户端链接对象。并在任务结束时断开链接。
原回答者GitHub用户jnliao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。