当前位置: 首页 > news >正文

erp网站建设销售外包公司

erp网站建设,销售外包公司,怎么学做淘宝免费视频网站,电商运营教程项目场景: 项目中需要把Mysql数据同步到ElasticSearch中 问题描述 数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据,本地测试也无法复现,后台程序也没有报错,一到正式环境就有问题,很崩溃 这里是批量操…

项目场景:

项目中需要把Mysql数据同步到ElasticSearch中


问题描述

数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据,本地测试也无法复现,后台程序也没有报错,一到正式环境就有问题,很崩溃

这里是批量操作的代码

private void bulk(List<IndexRequest> indexRequests) throws Exception {try {// 在这里可以对你获取到的批量结果数据进行需要的业务处理BulkProcessor bulkProcessor = BulkProcessor.builder((req, bulkListener) -> restHighLevelClient.bulkAsync(req, RequestOptions.DEFAULT, bulkListener),new BulkProcessor.Listener() {private int totalCount = 0;@Overridepublic void beforeBulk(long executionId, BulkRequest request) {}@Overridepublic void afterBulk(long executionId, BulkRequest request, BulkResponse response) {// 统计条数并输出信息int count = response.getItems().length;totalCount += count;log.info("批量操作 [{}] 成功执行了{}条请求,共处理了{}条数据", executionId, count, totalCount);}@Overridepublic void afterBulk(long executionId, BulkRequest request, Throwable failure) {log.error("数据处理失败,执行id为{},错误信息为:{}", executionId, failure);}}).setConcurrentRequests(esproperties.getThreadSize())/*并发请求的数量。默认为1。*/.setFlushInterval(TimeValue.timeValueSeconds(30)) // 固定30s必须刷新一次.setBulkSize(new ByteSizeValue(10L, ByteSizeUnit.MB)) // 5MB batch size.setBulkActions(esproperties.getBulkActions()) // 每次执行最多处理5000个请求.setBackoffPolicy(BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3)).build();indexRequests.forEach(bulkProcessor::add);bulkProcessor.close();} catch (Exception e) {e.printStackTrace();throw new Exception(e);}}

原因分析:

当时想到的问题是这里是不是数据格式有问题,因为采用的是异步,就是错误了也不会影响到其它数据的插入

接着就定位到了这段代码,想想是不是哪里没有处理错误的数据信息,所以没有打印出来,果然发现了BulkResponse 这个类,是可以处理每个错误信息的,接着就优化了代码如下

其实只需要修改afterBulk 方法,遍历出现的异常就能够打印出导入不进去的错误信息

 @Override
public void afterBulk(long executionId, BulkRequest request, BulkResponse response) {// 统计条数并输出信息
// int count = response.getItems().length;
// totalCount += count;
//  log.info("批量操作 [{}] 成功执行了{}条请求,共处理了{}条数据", executionId, count, totalCount);if (response.hasFailures()){for (BulkItemResponse itemResponse : response) {if (itemResponse.isFailed()) {log.info("数据写入失败:错误信息为:{}",itemResponse.getFailureMessage());}}
// log.info("数据写入失败:{}",response.buildFailureMessage());}
}

解决方案:

接着修改代码后把新的包放上去,执行,终于找到了错误信息

下面是错误信息的截图
在这里插入图片描述

报错 Limit of total fields 1000 这里就能看出来,是字段数量大于1000了,因为我的是宽表,而之前创建的索引字段数量都是小于1000的,新的索引结构数量大于1000,找到问题就好办了

在kibana执行下面脚本修改字段限制,根据实际情况来,没有kibana就写出curl 请求
在这里插入图片描述

PUT 你的索引名/_settings
{"index": {"mapping.total_fields.limit": 2000}
}

总结

  1. 没有测试好宽表字段比较多的情况
  2. 写代码的时候以为很简单不会出现问题,所以日志也比较随便。
  3. 日常开发要打印好日志,它能够在出现错误的情况下,很快的帮我们定位出问题所在。
http://www.tj-hxxt.cn/news/77795.html

相关文章:

  • 那个网站做图片好一手渠道推广平台
  • 挖掘企业构思的途径seo刷词工具在线
  • 开发一个网页系统需要多少钱海外seo推广公司
  • 仪征 做网站下载一个百度时事新闻
  • 学校网站设计论文百度资源分享网
  • 自己建网站的优势武汉疫情最新情况
  • 秦皇岛网络推广公司seo网站推广有哪些
  • 做百度手机网站优化点杭州疫情最新消息
  • 国外做爰网站 xzl49.cn搜狗seo查询
  • 推广网站文案微信客户管理系统平台
  • 苏州做网站公司电话淘宝运营培训机构
  • 个人免费域名空间建站前端培训班一般多少钱
  • 服务类产品抖音搜索seo代理
  • 长沙美容网站建设如何在百度发广告推广
  • 个人做加盟商机网站如何盈利微信app小程序开发
  • 做任务的兼职网站网站怎么做
  • 建设工程发布公告的网站西安核心关键词排名
  • 用vs做网站的教程培训推广 seo
  • wordpress 用户留言宁波网站关键词优化代码
  • 自建b2b平台有哪些51趣优化网络seo工程师教程
  • 微信网站开发设计广州seo团队
  • 推销什么企业做网站和app学生个人网页制作成品代码
  • wordpress主题怎么添加视频播放器怎么优化自己网站
  • 哪个网站做批发的武汉推广服务
  • 网站建设技术服务协议百度一键优化
  • 淮海中路街道网站建设佛山旺道seo
  • 东莞网站制作成人职业培训机构
  • 打赏网站开发谷歌浏览器下载安装2022最新版
  • 做游戏网站有几个要素百度站内搜索
  • 厦门网站开发公司站长工具网站测速