业务数据迁移至ES方案

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: ES 迁移

 1.1 目的

Elasticsearch是一个基于Lucene的实时分布式的搜索与分析引擎,是当前主流的企业级搜索引擎。提供了一个分布式服务,可以快速的近乎于准实时的存储、查询和分析超大数据集,可以快速的检索并提升用户的检索体验。

 

 

2.1 技术架构

image.png

 

ES数据操作

-1/-2:  前端/业务中心通过ES-SDK插件对ES表对像进行CRUD操作

 

PorlarDBES数据同步

Ø  -1/-2部分: 通用方案通过edas上的dts组件针对单表或简单join表从porlardb同步全量或是增量数据至ES,以供业务侧查询,全量同步择时进行,会影响业务,增量准时间处理。

Ø  -1/-2部分: 宽表方案,业务中心如需使用宽表,则在porlardb中建立和es中同结构的宽表,业务中心自身订阅binlog日志,通过binlog日志触发生成相应的数据至对应的宽表中,DTS组件配置对该宽表的增量同步至ES

Ø  -1/-3:  非宽表方案,业务中心定时或自身订阅binlog日志,直接生成相应的数据吐至ES(按实际的增量业务量可以业务中心和porlardb之间追加kafka解耦)

 

 

 

2.2 管理功能

ES运维:

https://help.aliyun.com/document_detail/90391.html?spm=a2c4g.11186623.6.665.57572ff7FnTKQ7

 

EDAS内组件ES本身提供了较多的管理运维功能,如下图,针对ES的运维功能通过EDASES控制台操作

11.png

12.png


 

ES组件集群示例图

13.png

 

 

数据入ES后,可能过ES自带的查询工具kibana作检索查询

14.png

2.3 部署架构

image.png

2.3.1      ES集群规格评估

  ES默认的主分片数为5个,副本数为1个,因此如ES3个可用区部署中,当其中一个可用区或两个可用区不可用时,剩下的可用区需要继续提供服务,因此索引的副本个数至少为2

 

阿里云ES的单机规格在一定程度上限制了集群的能力,本文根据测试结果和使用经验给出如下建议:

  • 集群最大节点数:集群最大节点数 = 单节点CPU * 5
  • 单节点最大数据量。

使用场景不同,单节点最大承载数据量也会不同,具体如下:

  • 数据加速、查询聚合等场景:单节点最大数据量 = 单节点存储空间(G) * 10
  • 日志写入、离线分析等场景:单节点最大数据量 = 单节点存储空间(G) * 50
  • 通常情况:单节点最大数据量 = 单节点存储空间(G) * 30

集群规格参考列表如下。

规格

最大节点数

单节点最大磁盘(查询)

单节点最大磁盘(日志)

单节点最大磁盘(通常)

24G

10

40 GB

200 GB

100 GB

28G

10

80 GB

400 GB

200 GB

416G

20

160 GB

800 GB

512 GB

832G

40

320 GB

1.5 TB

1 TB

1664G

50

640 GB

2 TB

2 TB

2.3.2      Shard评估

ES 6.x版本的索引默认包含5个主shard1个副shard

基于以上问题,下文对shard规划提供了一些建议。这些建议仅供参考,实际业务中还需根据需求进行调整:

  • 建议在分配shard前,对ES进行数据测试。当数据量很大时,要减少写入量的大小,降低ES压力,建议选择多主1个副本;当数据量较小,且写入量也比较小时,建议使用单主多副本或者单主一副本。
  • 建议一个shard的存储量保持在30G以内(最优),特殊情况下,可以提升到50G以内。如果评估结果超过该容量,建议在创建索引之前,合理进行shard分配,后期进行reindex,虽然能保证不停机,但是比较耗时。

说明对于评估数据量低于30GB的业务,也可以使用1主多备的策略进行负载均衡。例如20GB的单索引,在5个数据节点中,可以考虑14副本的shard规划。

  • 对于日志分析或者超大索引场景,建议单个shard大小不要超过100GB
  • 建议shard的个数(包括副本)要尽可能等于数据节点数,或者是数据节点数的整数倍。

说明主分片不是越多越好,因为主分片越多,ES性能开销也会越大。

  • 建议单个节点上同一索引的shard个数不要超5个。
  • 建议单个节点上全部索引的shard的数量不要超过100个(可以提升ES的性能开销)。
  • 建议按照1:5的比例添加独立的协调节点(2个起),CPU:Memory1:41:8。例如10832G的数据节点,建议配置2832G的独立协调节点。

 

 

 

3      关键设计

3.1 关联查询设计

大原则: 设计时尽可能使用扁平的文档模型

 

3.1.1      应用层做关联

数据归属于不同的索引中,从某一索引中查询出关联字端后从其它索引继续查询出相关数据,应用层对多个索引中查询出来数据作整合,适用于查询出数据量较小的情况,结构相对清晰,但要多次查询

 

3.1.2      ES中宽表化处理

按业务需求整合porlardb中多表中的关键字段整合成宽表存储至ES中,在ES中查询即不需要关联查询,但需要前期数据整合处理

 

3.1.3      嵌套对象(nested)

Ø  冗余度大,查询只能返回符合条件的整个文档,不能部分返回嵌套文档中的数据,但查询时无需关联操作

 

      注意点:

u  单个索引中最大允许拥有50nested类型的数据。

u  单个文档中所有nested类型json对象数据的总量是10000

 

3.1.4      Join文档存储

Ø  每个索引只允许一个Join类型Mapping定义,父文档和子文档必须在同一个分片上编入索引,当进行删除、更新、查找子文档时候需要提供相同的路由值。

Ø  一个文档可以有多个子文档,但只能有一个父文档。

Ø  可以为已经存在的Join类型添加新的关系,当一个文档已经成为父文档后,可以为该文档添加子文档。

Ø  一个索引中只能有一个join类型字段,join 类型可以是一种父文档对应多种子文档,子文档可以作为父文档,关联关系需在导入数据前提前建立并确认正确

Eg:  "info": {

        "type": "join",

        "relations": {

          "one": ["two-1","two-2"],

          " two-1": " three-1"

        }

      }

Ø  子文档数据量要明显多于父文档的数据量,存在1 对多量的关系,子文档更新频繁的场景

 

 

u  索引时,主分片的数量一经定义就不能改变

u  routing是一个可变值,默认是文档的_id

 

3.1.5       NestedJoin简单比对

对比

Nested

Json

优点

文档独立存储,读取性能高

父子文档可以独立更新,互不影响

缺点

更新父或子文档时要更新整个文档

为维护join关系,要占用部分内存,读取性能较差

应用场景

子文档偶尔更新,查询频繁

子文档更新频繁

 

3.2 数据同步参考

3.2.1      阿里云组件

3.2.1.1     DTS同步(binlogs准时实同步-单表操作)

因目前DTS不支持DRDS(Porlardb)直接同步到ElasticSearch,因为同步会配置各个分库分表的数据分别同步到ES的同一个type下作归集。

业务组如需选用DTS则提交各分库账号,分库表名至DBA侧统一添加

 

       : DTS同步不会作下划线和驼峰的转换,因此如数据库表中字段是以下划线区分,同步至ES中字段名仍是下划线,如果读取的实体类字段名为驼峰,可添加注解作转换,但存数据时仍和实体字段名一致,可能会存在不一致情况,如数据入ES有多个源: DTS,Dataworks,业务代码,注意保持三者字段名是一致的。

 

 

 

3.2.1.2     DataWorks同步(定时任务最小五分钟-单表操作)

需有更新SQL控制,局限性:

Ø  表中需要有modify字段为更改时间戳,包括新增、更新、删除(逻辑删除)

Ø  非准实时(触发机制非binlog方式)

 

DRDS-Reader:

https://help.aliyun.com/knowledge_detail/74310.html?spm=a2c4g.11186631.2.1.48974c072XoEBC

 

ElasticSearch-Write:

https://help.aliyun.com/knowledge_detail/74362.html?spm=a2c4g.11186631.2.18.3a474c0782SNCw

 

样例及说明

3.2.2      开源组件

3.2.2.1     Canal/Canal adapter

https://github.com/alibaba/canal/tree/master/client-adapter

 

该方案的优点  

1、 可支持并发,github源码方便调整,支持sql条件导出,并有对应的es6,es7版本,方便版本适配

 

 

该方案的缺点

1、  相关功能需依据具体的迁入表结构作更详细的功能验证,如相关迁入表对应的分词,查询建议名段等

2、  插件分页逻辑需调整优化下,目前代码内部直接是limit分页,改动量小

 

简单验证(550万记录数),调整插件的分页逻辑后大概可以提高百分之十五速度

 

原方式:sql + " LIMIT " + offset + "," + size;

调整后方式: SELECT * FROM xxx WHERE ID > =(select id from xxx limit 1000000, 1) limit 20;


 

3.2.2.2     logstash

Logstashes组件套餐中用来同步数据的,本身支持全量的从mysql同步至es

 

该方案的优点:

1、 本身和es属同一家产品,与es无缝对接

2、 支持SQL方式指定同步数据

 

3.2.2.3     datax

该方案的优点

1、 执行效率高,可支持并发

 

 

该方案的缺点

1、 目前并不支持es6.0版本以上的写入,需添加相关的插件支持

 

 

方案建议

选择方案一/方案二,基于方案一主要是组件方式,需在阿里云上购买

 

 

 

 

 

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
7月前
|
数据库 OceanBase 索引
OceanBase迁移服务(OMS)支持不同大小和复杂度的表的迁移
【2月更文挑战第25天】OceanBase迁移服务(OMS)支持不同大小和复杂度的表的迁移
224 3
|
SQL 数据采集 数据可视化
需求:公司需要做数据迁移同步,以下是几种常见的ETL工具选型对比
需求:公司需要做数据迁移同步,以下是几种常见的ETL工具选型对比
|
2月前
|
编解码 前端开发 UED
多屏幕适配方案
【10月更文挑战第7天】
48 1
|
7月前
|
存储 关系型数据库 分布式数据库
【PolarDB开源】PolarDB高可用架构解析:确保业务连续性的关键设计
【5月更文挑战第22天】阿里云PolarDB是一款高可用、高性能的云原生数据库,采用分布式共享存储架构实现计算与存储分离。通过主从复制保证数据实时同步,当主节点故障时,从节点能快速接管。此外,PolarDB提供自动故障转移和数据备份恢复功能,确保业务连续性和数据安全性。一个简单的Python SDK使用示例展示了查询数据的过程。总之,PolarDB通过多种机制保障了企业在异常情况下的服务稳定和数据完整性。
280 5
|
数据采集 Cloud Native 关系型数据库
实现业务零停机!NineData的PostgreSQL数据迁移能力解析
NineData推出了PostgreSQL业务不停服数据迁移能力。NineData实现了完全自动化的结构迁移和全量数据迁移,并提供了变更数据的迁移能力。这种能力可以实时监听源PostgreSQL中的变更数据,在完成全量迁移后将变更数据实时复制到目标PostgreSQL,实现源/目标PostgreSQL的动态复制。在PostgreSQL数据迁移过程中,业务可以正常提供服务,无需停服。最终,业务可以根据需求选择对应的时间点切换到目标PostgreSQL。
620 1
|
7月前
|
存储 运维 关系型数据库
规划阿里云RDS跨区迁移业务需求业务影响分析
规划阿里云RDS跨区迁移业务需求业务影响分析
82 4
|
7月前
|
canal 监控 关系型数据库
【技术选型】Mysql和ES数据同步方案汇总
【技术选型】Mysql和ES数据同步方案汇总
485 0
【技术选型】Mysql和ES数据同步方案汇总
|
关系型数据库 Serverless 分布式数据库
PolarDB的Serverless模式可以根据业务负载的变化
PolarDB的Serverless模式可以根据业务负载的变化
|
存储 Linux Go
Habor数据迁移方式有多少,skopeo效率最好
Habor数据迁移方式有多少,skopeo效率最好
155 0
|
前端开发 JavaScript NoSQL
6款 Retool 最佳替代方案
本篇文章的目的通过低代码平台使用者的视角引出细节,了解他们为什么使用低代码平台以及会选择哪个低代码平台来加速内部系统的开发。
836 0
6款 Retool 最佳替代方案