canal1.1.7 mysql5.7 es:7.17
1.首先是canal1.1.7的yaml解析问题,我替换了源码中_id等字段,本地运行成功,全量同步没问题,增量同步不报错,但没有成功 2.在服务器上部署后能打印dml语句,但同步报错空指针(全量,增量都失败)
这是我的配置文件
确保启动成功
原提问者GitHub用户mileaw
问题出在配置文件,说下思路吧,希望能帮到大家
ps:时间紧迫没有看canal的文档,通过wiki上的教程安装,看issue.....
所有这块可能是我自己配置不规范的问题......
源码打包有额外的两个yml配置(在es7文件夹中),我没有删除,所以这两个文件也被加载进配置,按理说不同的配置之间不会互相影响,所以我一开始没有管...
这些配置文件会被ESSyncConfigLoader加载成ESSyncConfig对象,loader中通过Ymlutil工具类加载,这是加载部分的代码 if (baseProperties != null) { baseProperties.putAll(properties); properties = baseProperties; }
baseProperties是方法参数,外部循环遍历所有的es相关yml,这里putAll把当前文件的配置放入baseProperties;
如果所有的配置文件key类型都相同,这样覆盖没问题,但我的配置文件没有relation这个字段,而customer.yml中有 relations: customer_order: name: customer 循环遍历配置文件时先把relation写入到baseProperties中了,然而后面遍历我的yml配置时,上一次的relation没有被覆盖掉,
这就导致解析我的配置时把上一个配置文件中的relations一起加载成了ESSyncConfig对象;
最后运行时putRelationDataFromRS(mapping, schemaItem, resultSet, esFieldData);就会空指针
解决方法:
1.把其他两个文件删了(我目前只用一个yml就ok)
2.修改ymlutil,用完后在baseProperties中清除本次用于绑定到ESSyncConfig的配置
原回答者GitHub用户mileaw
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。