开发者社区> 问答> 正文

V1.1.0版本,源端没有数据时,dump日志的socket25s就timeout抛异常,导致重连

启动Canal,如果持续有数据,不报错。当没有数据时,25s就SocketTimeoutException异常,导致重连。 报错位于BioSocketChannel.read(BioSocketChannel.java:123) 查看代码,BioSocketChannel中的SO_TIMEOUT=1000,即1s,如果read()不到数据,1s就会抛出SocketTimeoutException。其中累加到入参的25s,就会向上抛出异常,导致重连。

在文件DirectLogFetcher中定义了master hearbeat=15;然后READ_TIMEOUT_MILLISECONDS=(MASTER_HEARTBEAT_PERIOD_SECONDS + 10) * 1000;即read()的时候timeout=25s。 现在现象就是BioSocketChannel中的read(25)方法传入的timeout时间是25s,如果没有增量数据,超过25s,就抛出SocketTimeoutException异常了。

如果不开启master heartbeat的话,是不是25s就会sockettimeout异常,进行重连。 开启master heartbeat是设置配置文件中的canal.instance.detecting.enable =true 和canal.instance.detecting.heartbeatHaEnable = true么?我现在设置了没有起作用呢?是哪里没设置对么

原提问者GitHub用户theonesmx

展开
收起
Java工程师 2023-05-08 19:10:57 87 0
1 条回答
写回答
取消 提交回答
  • canal.instance.detecting.enable和binlog master heartbeat不是一个概念。 canal.instance.detecting.enable是fork出另一个connection由canal server发起的heartbeat。 binlog master heartbeat则是MySQL dump协议的一部分,由MySQL master发起直接在dump connection中传输。canal server 无需配置直接开启的(为了解决半连接问题)。 https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html 可以看MASTER_HEARTBEAT_PERIOD 这一段,检查下master端是否生效.

    原回答者GitHub用户lcybo

    2023-05-09 19:07:17
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载