Hello,World

Logstash 读取SQL数据库时分页问题

Logstash | 作者 cxzy888 | 发布于2019年11月02日 | 阅读数:171

背景: 我有一个PostgreSQL数据库存储1000W左右的数据,因为数据库在美国所以读取延迟大,我准备用logstash把所有数据同步到本地ES服务器并持续增量更新
当前方案:因为已经有1000W的数据待更新,所以我觉得不应该一次完成query,因此使用分页模式,每次读取5W条,同时track 一个时间戳column来更新last_sql_value,配置文件网上有很多我就不贴我自己的了
   jdbc_paging_enabled => "true"
    jdbc_page_size => "50000"
出现的问题:
1. 数据重复/丢失 : logstash的运行过程中使用limit offset但是没有加入orderby,而且我写入的sql statement被作为一个子查询,即使我写了orderby,也没有被真正引用, 所以导致每次查询到的分页都有重复, logstash的语法参见:
SELECT * FROM (SELECT error_datetime_ts,error_text,dl_load_date,log_type  FROM syserr_dtl where dl_load_date > '1970-01-01 00:00:00.000000+0000' order by dl_load_date ASC ) AS "t1" LIMIT 50000 OFFSET 900000 . 这里面我的排序order by dl_load_date ASC根本没有被使用
   重复的问题可以通过output中主键赋值_id来解决,但是因为offset limit的总数是固定的,重复的另一个问题是一部分的数据出现了丢失,这个是没法解决的
   我尝试了对于另一个100W的数据库同步时不加分页,结果就是对的,但是对于千万级的量,不分页的结果是?
我搜索中发现了类似的问题,如果不是我哪里理解有错的化,这岂不是一个大bug?望高人指点,谢谢!
https://elasticsearch.cn/question/1531   
(见回复)
https://blog.csdn.net/tsxw24/a ... 94835
已邀请:

要回复问题请先登录注册