前言
成也容器重启,败也容器重启,说好的重启治百病,在容器这里,是重启出百病啊!
之前说过,我们使用statefuset类型使canal-server域名固定之后又挂载pv使server即使重启也不会丢失数据,本以为万事大吉,没想到在用adapter同步数据时发现还是出了bug…
问题
使用域名注册server之后,马上启了个adapter去检测一下域名方式是否可用,将canalServerHost的值设置成域名之后启动,数据成功同步,内心狂喜,感觉自己已经彻底成功了,但还是本着严谨的态度,手动delete掉canal-server的pod打算做一下测试,sever停止,adapter马上抛出异常,然后尝试重连,嗯,是我预想的现象,但是…五分钟过去了,server的pod早就重启了,为什么adapter还在尝试重连?
哪里的问题呢?第一次使用域名连接同步正常,表示域名方式的连接是没有问题的,但是重启之后就连接不上了,心里觉得和adapter与server的连接机制有关系,没办法,去读代码吧。
解析
注:本人在使用canal-adapter-v1.1.4版本的时候遇到过数据丢失的情况,没有查出原因,最终选择了1.1.5-alpha-1版本
- com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterLoader.java
/**
* 初始化canal-client
*/
public void init() {
loader = ExtensionLoader.getExtensionLoader(OuterAdapter.class);
String canalServerHost = this.canalClientConfig.getCanalServerHost();
SocketAddress sa = null;
if (canalServerHost != null) {
String[] ipPort = canalServerHost.split(":");
sa = new InetSocketAddress(ipPort[0], Integer.parseInt(ipPort[1]));
}
String zkHosts = this.canalClientConfig.getZookeeperHosts();
if ("tcp".equalsIgnoreCase(canalClientConfig.getMode())) {
// 初始化canal-client的适配器
for (CanalClientConfig.CanalAdapter canalAdapter : canalClientConfig.getCanal

解决Kubernetes环境中Canal Adapter使用域名连接Canal Server时出现的重连失败问题,通过代码修改实现域名解析实时更新,确保容器重启后的连接稳定性。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



