1、新加字段后做全量同步更新方式
原本计划操作步骤:
1) 通过命令DELETE im_order_deposit/ 删除es索引
2)将im_order_deposit.yml文件放到canal-adpter 的conf/es7目录下,然后重新启动canal-adapter,采用停一台启动一台的方式进行启动(先停掉不在作业的canal-adapter,再启动;最后采用同样的方式操作正在作业的canal-adapter),
特别注意,canal-server不要做任何操作
3)建立es索引index_order_deposit,具体es脚本在index_order_deposit.txt文件中(如果im_order_deposit被自动建立了,继续执行步骤1)中的命令进行删除,在重新建立index_order_deposit索引);
4)在canal-adapter节点全部重新启动后,在作业的canal-adapter机器上执行全量同步数据命令curl -X POST http://127.0.0.1:8082/etl/es7/im_order_deposit.yml,执行玩后,将执行玩命令的结果(这个结果可能需要等待一点时间才可以出来)中的全量同步数据的条数记录下来,用该记录下来的数据来判断全量同步数据的正确性;
按照上面的操作会导致数据同步不完整,并且日志中会报有类似这样的错误:
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: 全量数据 etl 异常 ElasticsearchException[Elasticsearch exception [type=mapper_parsing_exception, reason=failed to parse field [createTime] of type [date] in document with id '1523869247575015425'. Preview of field's value: '2022-05-10 11:35:15.0']]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=failed to parse date field [2022-05-10 11:35:15.0] with format [strict_date_
原因是旧的yml文件会自动创建新的索引,手动创建索引的速度赶不上程序的速度
改进后的更新方式:
1)删除3台adapter服务器上的im_order_deposit.yml文件
2)通过日志判断哪一台adapter在工作,依次重启adapter服务,先从不工作的2台开始
3)先删除老的index_order_deposit索引,建立新的index_order_deposit索引,具体es脚本在index_order_deposit.txt文件中;
4)将新的im_order_deposit.yml更新至svn中,然后去服务器拉取此更新,更新完重启adapter服务,重启方式参考第二步
5)通过日志判断在工作的adapter,然后在此服务器上做全量同步,同步脚本:
curl -X POST http://127.0.0.1:8082/etl/es7/im_order_deposit.yml
6)同步的同时可以在kibana上看数据是否有增加,再结合adapter日志看是否有报错,如果没有报错,且同步数量正确即更新完成。