在工作中,会遇到一种场景是将MySQL的数据同步至ES(或者HDFS,kafka等)中,其中一种方案是使用logstash进行数据的同步,使用logstash-input-jdbc(https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html)插件。
该插件中有一个参数是last_run_metadata_path,该参数是用来记录最新的同步的offset信息的。
如果我们在使用docker部署logstash的情况下,可能会出现服务的问题或者offset出错等问题,导致我们的数据不在更新,此时我们需要reset 这个metadata信息,这里有一个简单的做法:
- docker stop logstash-instance # 停止logstash容器
- 修改statement,如果我们是根据:sql_last_value来对应的字段,先确定下当前同步的最新的字段值为多少,然后在statement中的where条件中修改为以下信息
where filed_name >= xxxxxx
- docker start logstash-instance 同时reload logstah.conf
- 等待一段时间后,在修改logstash.conf ,将filed_name >= xxxxxx 调整为
where field_name >= :sql_last_value
- 最后重启,即可