Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ES迁移数据量不对 #39

Open
WayneLee5991 opened this issue Nov 12, 2020 · 6 comments
Open

ES迁移数据量不对 #39

WayneLee5991 opened this issue Nov 12, 2020 · 6 comments
Assignees

Comments

@WayneLee5991
Copy link

bboss版本:6.2.2
ES版本:7.3.2
ES迁移的时候,日志显示ES2ESDataTranPlugin: Export completed and export total 1000 records
但是目标集群对应的索引有的数据量和源集群一致,有的不一致,丢失了数据。。。
当数据量比较小的时候,数据量基本一致,但是当数据量打到百万千万级别的时候,总差个几千条。。

@yin-bp yin-bp self-assigned this Nov 12, 2020
@yin-bp
Copy link
Contributor

yin-bp commented Nov 12, 2020

Hi,@WayneLee5991
数据同步到es,数据不一致问题原因有多方面的,最主要的原因之一,导入的时候elasticsearch服务端处理不过来,造成部分数据被elasticsearch拒绝的情况,这种情况下需对导入作业的相关参数进行适当调优,比如导入的batchsize,线程数等等,另外bboss提供了导入结果回调处理接口,导入过程中有错误和异常时,会调用对应的接口回调方法,便于排查问题,相关的资料可以访问以下文档了解:

https://esdoc.bbossgroups.com/#/db-es-tool
对应的章节
2.3.12 设置任务执行结果回调处理函数
2.8 数据导入不完整原因分析及处理

@WayneLee5991
Copy link
Author

Hi,@WayneLee5991
数据同步到es,数据不一致问题原因有多方面的,最主要的原因之一,导入的时候elasticsearch服务端处理不过来,造成部分数据被elasticsearch拒绝的情况,这种情况下需对导入作业的相关参数进行适当调优,比如导入的batchsize,线程数等等,另外bboss提供了导入结果回调处理接口,导入过程中有错误和异常时,会调用对应的接口回调方法,便于排查问题,相关的资料可以访问以下文档了解:

https://esdoc.bbossgroups.com/#/db-es-tool
对应的章节
2.3.12 设置任务执行结果回调处理函数
2.8 数据导入不完整原因分析及处理

我使用了2.3.12中的ExportResultHandler,batchsize设置为5000,假设数据量为4000万,那么处理成功5000条机会调用success方法,有没有一个方式可以监听全部处理成功呢??或者是需要自己计数??

@yin-bp
Copy link
Contributor

yin-bp commented Nov 13, 2020

看看章节:
https://esdoc.bbossgroups.com/#/db-es-tool
2.3.17 数据同步任务执行统计信息获取

@yin-bp
Copy link
Contributor

yin-bp commented Nov 14, 2020

可以加入bboss的讨论开发群进一步交流
Elasticsearch技术交流群:21220580,166471282

Elasticsearch微信公众号:

对于你的情况建议如下

1、batchSize,fetchSize我修改为5000,threadCount=100,queueSize=200,几乎都是官方文档里的最小值。但是还是会sockettimeout 。目标ES集群不是我们管理的,优化需要和他们交流。
答复: threadCount为100实在是太大了,es扛不住了,还搞这么大的同步并发量肯定不行的,threadCount可以适当调整为10,queueSize可以调整为1000,batchSize可以改为1000,如果还抗不住,再适当调小threadCount
同步的时候将refresh机制都关闭掉

2、如果4000万的数据迁移到一半出错了,我想使用增量方法,增量字段是否支持_id?我们集群的索引id是自定义的long类型的数据
答复:建议你在你的索引表里面额外加一个long字段,专门用于增量同步

@WayneLee5991
Copy link
Author

可以加入bboss的讨论开发群进一步交流
Elasticsearch技术交流群:21220580,166471282

Elasticsearch微信公众号:

对于你的情况建议如下

1、batchSize,fetchSize我修改为5000,threadCount=100,queueSize=200,几乎都是官方文档里的最小值。但是还是会sockettimeout 。目标ES集群不是我们管理的,优化需要和他们交流。
答复: threadCount为100实在是太大了,es扛不住了,还搞这么大的同步并发量肯定不行的,threadCount可以适当调整为10,queueSize可以调整为1000,batchSize可以改为1000,如果还抗不住,再适当调小threadCount
同步的时候将refresh机制都关闭掉

2、如果4000万的数据迁移到一半出错了,我想使用增量方法,增量字段是否支持_id?我们集群的索引id是自定义的long类型的数据
答复:建议你在你的索引表里面额外加一个long字段,专门用于增量同步

我把batchSize和fetchSize修改为500,threadCount修改为5,处理几个千万级别的索引后还是会报sockerTimeOut异常,是不是这个目标ES集群有点过于垃圾了。
当我重启,同步一个索引,日志中打印了CustomExportResultHandler:Task[Import DB Data to Elasticsearch] rejected 100 times,这个rejected 100 times会一直增长,这是目标ES集群拒绝处理数据的意思吧??
这么看来,不管怎么优化bboss,目标ES集群都会报错,所以只能优化ES了

@yin-bp
Copy link
Contributor

yin-bp commented Nov 16, 2020

Hi,@WayneLee5991
sockettimeout确实是es处理能力问题,需要进行优化,可以先优化你们mapping结构。

CustomExportResultHandler:Task[Import DB Data to Elasticsearch] rejected 100 times
这个rejected 100 times只是告诉你bboss在多线程写入数据到elasticsearch时,由于es写入慢,bboss作业任务出现排队等待告警,bboss不会丢弃数据,直到所有的数据处理完毕。

bboss作为一个数据源同步工具,可以根据同步作业部署服务器配置、elasticsearch服务器处理能力,灵活调整数据同步作业参数,在确保数据准确性的前提下,追求最佳的同步性能和速度

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants