logstash分批次同步大量数据

问题:

用logstash同步mysql数据到elasticsearch,原始数据有几千万条,发现过了几十万条之后,到了后面同步就特别慢,无法完成同步


原因:

 statement => "select * from t_wechat_message where id > :sql_last_value"

logstash配置文件中会配置同步时需要执行的sql,sql_last_value是内置变量,我这里面记录的是每次同步之后的id的值,id是自增的,但是在真正执行sql的时候,开启分页的模式下,logstash会在statement外面包上一层查询

SELECT * FROM (select * from t_wechat_message where id > 20000000) AS `t1` LIMIT 500 OFFSET 100000;

如果当前批次需要同步的数据量特别大,就会导致offset特别大,offset特别大的时候,sql执行时间就特别长,导致无法完成同步



方案:

分批进行,每批量只执行100000条,这样offset最大值也只有100000,速度会大大提高

 statement => "select * from t_wechat_message where id > :sql_last_value limit 100000"

或者

 statement => "select * from t_wechat_message where id > :sql_last_value and id < (:sql_last_value + 100000)"


你可能感兴趣的:(java)