DB 与 Elasticsearch 混合应用之数据离线同步

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 详细介绍如何解决DB到Elasticsearch数据离线同步问题

作者介绍

李猛,Elastic Stack 深度用户,通过 Elastic 工程师认证,2012年接触 Elasticsearch,对 Elastic Stack 技术栈开发、架构、运维等方面有深入体验,实践过多种大中型项目;为企业提供 Elastic Stack 咨询培训以及调优实施;多年实战经验,爱捣腾各种技术产品,擅长大数据,机器学习,系统架构。

序言

首先解释下 即时、实时与离线 概念定义,最近碰到很多的认知误区,需要纠正下。

即时概念

当数据变更之后马上就可以查询变更,内部采用事务隔离机制,查询的数据必须阻塞直到数据更新完毕,如单实例关系数据库数据发生变更后,然后马上可查询到。

实时概念

在数据同步场景中,包括异构数据源和同构数据源之间,泛指在可接受的很快时间范围内同步完成,一般的认知是秒级左右,也可以毫秒或者微秒,依据业务需求与实现能力定义。如 MySQL 主从同步也做不到即时性,只能实时性,业务系统如果做读写分离,也仅限非即时数据

离线概念

相比实时定义,离线没有很强的时间即时性要求,一般强调数据的吞吐量,一般常规定义分钟级、小时级、自然天。如大数据BI应用中,数据同步要求普遍T+1。

image.png

前一篇文章《DB与ES混合应用之数据实时同步》,我们主要分享了实战项目中基于CDC机制构建的数据实时同步技术方案,整体技术栈链路长,中间环节多,需要复杂的代码编程,投入成本高,不利于快速投入生产应用。实际在多数业务系统场景中,离线同步需求占比最高,下面这篇文章,我们主要探讨DB到ES的数据离线同步问题。

背景要求

DB到Elasticsearch离线同步的业务应用场景有很多,相比实时同步业务应用场景,更能体现选择Elasticsearch替代DB作为查询引擎的优越性,以下介绍几个离线同步的业务场景。

历史数据查询

在电商或者物流行业,日均会产生很多订单数据,未完成的订单数据实时性查询频率高,需要做很多上下游的数据流转处理;相反已经完成的订单数据查询频率不高,但是日积月累的历史订单数据会增加很快,若系统架构设计将实时数据与历史数据合并一起等同对待,那么运行一段时间数据系统会出现很多致命的性能问题,如实时数据查询更新会变慢,用户体验下降,历史数据查询量大,一次查询可能会将系统严重阻塞。

常规的做法是将实时数据与历史数据分离设计,实时数据查询频率高,单次查询数据量小,系统响应快;历史数据查询频率低,单次查询的数据量多,系统响应稍慢,甚至可以接受慢一些。

介于传统关系型数据库的局限性,同样采用 Elasticsearch 应对此系统场景,实时数据查询走Elastic实时集群,历史数据走Elastic历史集群,实时数据同步可以使用CDC机制,历史数据同步得需要专用离线通道方法。

image.png

业务技术重构

随着公司业务调整与业务发展,业务系统也需要相应持续的重构,不仅业务模型要重构,技术架构也需要重构,由于人的原因或者技术发展的原因,原有的数据库系统难以满足业务需求,此时需要更换到更合适的数据库系统。

如很多基于Mongodb存储的业务系统,其实切换到Elasticsearch更加合适,速度更快,成本更低(后续案例在编辑...),那么系统重构之后就需要将数据从Mongodb全量同步到Elasticsearch,这也属于离线同步场景。

关系性数据库局限性就不用说了,大名鼎鼎的Mongodb其实也有很多业务应用短板,或者应用误区,如很多基于Mongodb存储的业务系统,其实切换到Elasticsearch更加合适,速度更快,成本更低,切换成本也很低(详细见另一篇文章《为什么要从Mongodb迁移到Elastic》),那么系统重构之后就需要将数据从Mongodb全量同步到Elasticsearch,这也属于离线同步场景。

image.png

技术产品

离线同步相比实时同步,技术复杂度降低很多,场景苛刻需求也要小很多,因此技术方案的选择度更多,有很多非常优秀的专用工具产品,只需要稍微配置即可启用,下面我们介绍几个当下很流行的产品(个人喜好问题),简要分析它们的优秀特性以及架构原理。

Logstash

Logstash是Elastic官方产品,掌握Elastic-stack必备之一

• 基于Jvm平台JRuby语言开发,开源免费
• 产品架构设计简洁优秀, 模块设计层次分明, input -> filter -> output
• 支持pipeline模型,且多个pipeline之间可以相互依赖
• 产品功能丰富,支持的数据源众多,也支持自定义编辑,其中包括Ruby脚本
• 支持泛JDBC协议,采用SQL表达式,从DB抽取数据到ES,支持CRON定时,可做实时同步
• 与Elastic-stack可集成一体,在Kibana可以查看监控数据
• 单实例运行模式,多实例之间无集群通信,不支持集群,易掌握部署
• 非平台型工具,轻量级

Logstash 在开发圈中流行度不大,但在运维圈流行度很高,主要得益于ELK组合的概念普及,其实在数据同步方面,是最简单的最实用的产品工具之一

image.png

Data X

DataX是阿里出品的数据同步工具,定位多种数据库之间离线数据同步

• 基于Java开发,插件机制
• 产品架构设计简单,两大概念模块,reader->writer
• 支持DB到Elastic数据同步,采用SQL表达式,仅限制离线同步
• 单实例运行模型,多实例之间无集群通信,无集群模式支持,易掌握使用
• 非平台型工具,轻量级

DataX工具称不上优秀,得益于阿里巴巴的名气,使用简洁与性能吞吐好,获得开发圈很大的支持,在很多一次性离线数据同步项目中,应用很广。

image.png

NiFi

NiFi是Apache的顶级产品项目之一,由美国军方早期开发捐献开源,定位数据同步领域。

• 基于Java语言开发,插件机制,支持自定义开发
• 产品架构设计优秀,Processor 核心模块概念,
• 功能强大,支持复杂的脚本功能,包括java,javascript,python,ruby等
• 支持DB到Elastic数据同步,可采用SQL表达式方式,也可以采用CDC机制
• 即可实时同步,也可离线同步,且可支持多种Processor组合
• 友好的操作界面,可视化配置
• 平台型产品,支持集群部署
• 入门简单,精通门槛高

NiFi虽然历史悠久,但在国内知名度却不高,不如Hadoop圈的Sqoop等,不过CDH已经在最新版中集成。个人非常喜欢这款产品,因为其平台化的系统架构,前面介绍的DataX与Logstash都属于雕虫小技的工具。

image.png

Flink

Flink是当前大数据圈最有人气的流式处理产品,在实时计算领域应用最广。

• 基于Java语言编写,平台型产品
• 分布式架构设计,机制功能丰富,支持检查点机制,程序容灾、状态持久等
• 丰富的编程模型,层次分为 Streaming->Dataset->Table->SQL
• 支持流式计算与离线计算,其中支持泛JDBC数据源离线同步到Elastic
• 集群化运行模式,需要自主编写数据处理代码。

Flink虽然定位在实时计算领域,但由于其底层架构设计的特点,离线计算支持也非常好,提供了友好的编程模型,可快速开发部署,类似的产品还有Spark,这里就不做更多的展开讨论。

image.png

ETL工具

专业ETL产品太多了,就不展开讨论了,由专业的BI从业人员讲述更合适...

• Kettle
• DataStage
• Informatica

技术平衡

以上我们介绍了好几种当下流行的数据同步工具,有的支持离线同步,有的也支持实时同步,其实还有更多其它不错的工具产品,每一种工具产品都有它的局限性与优越性,千万不可一概而论,也不可全都上,需要综合业务与技术平衡。

客观认知

每种工具产品都有它的定位,需要客观的认知评估。在业务系统中数据离线同步场景需求多种多样,没有一个完美的产品可以应对所有场景需求。

如DataX属于直接型同步工具,中间没有数据处理功能,其Mysql模块虽然支持所谓的增量型同步,但分批次的连续型同步方式需要借助人工触发,这会造成一些不方便,但是数据吞吐量很好。

有一次客户现场服务说Logstash居然不支持JDBC写入数据的插件,然后得出结论此工具产品做的不好,理由是不满足多个数据库之间数据同步,考虑到他们属于传统实体企业就没有做过多的讨论,实际上Logstash已经做的非常好,适合的数据同步场景很多,相比DataX多了一个分批次连续的定时机制,不知道要减少多少工作量。

image.png

混搭组合

业务系统中数据离线同步场景多种多样,单一工具产品无法完成所有场景,需要混合多种工具产品完成。

如NiFi平台型产品 ,功能很强大很丰富,也支持从本地文件读取数据,但是此方式太重,程序包本身很大,需要好几个G磁盘容量,可能需要同步的数据量都没有NiFi安装包大,所以此时应该选择一些单机版本的工具产品,如Logstash等

image.png

技术融合

每种产品工具都有它的架构设计理念,有它的独特技术特点,掌握并很好融合需要一定的精力和时间,否则会出现很多衍生问题。如Flink从开发层面来看 ,入门简单并可完成数据同步代码的开发,但是真正复杂的是架构运维掌控能力,Flink是平台型产品,本身复杂度很高。

image.png

技术融合能力分层

• 开发层面, 了解产品各种Api特性,能够熟练响应各种需求
• 架构层面,深入了解产品基本原理,对其基本的能力有很客观的认知
• 运维层面,掌握产品的运维能力,各种异常情况有响应的保障手段

结语

经验总结

数据同步是一个仁者见仁,智者见智的话题,成熟的产品工具可以快速响应需求,重新编写程序可以更好的定制化需求,因人而异,因需求而异。
Elastic有很多优秀特性,即可以应对实时数据场景,也可以应对历史数据场景,有点儿几乎无所不能。“Elastic用的好,下班下的早”。

内容来源

本文内容来源在业务系统中大量运用DB与ES混合实战,得出的一些实战与思考,提供后来者借鉴参考,内容原创转载请注明。

专题课程

Elastic目前在国内几乎所有信息科技公司都在使用,无论是几个人的工作室,还是规模千人大型公司,应用的领域非常广,非常受欢迎。Elastic虽然入门简单,要想使用好,需要很长时间磨合,为此,我们专门特点设计了专题课程。帮助个多人或公司用好。
首先从数据同步开始,包括离线数据同步与实时数据同步,如何把DB的数据导入到Elastic,且能应付各种数据请关注我们的《DB与ES数据同步实战专题》,实战课程理论很少,主要是案例代码,课程系列如下:

• Logstash系列
• DataX系列
• NiFi系列
• Flink系列
• CDC系列

声明:本文由原文作者“李猛”授权转载,对未经许可擅自使用者,保留追究其法律责任的权利。


image.png

阿里云Elastic Stack】100%兼容开源ES,独有9大能力,提供免费X-pack服务(单节点价值$6000)

相关活动


更多折扣活动,请访问阿里云 Elasticsearch 官网

阿里云 Elasticsearch 商业通用版,1核2G ,SSD 20G首月免费
阿里云 Logstash 2核4G首月免费


image.png

image.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
228 4
|
20天前
|
人工智能
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
166 2
|
24天前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
151 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
1月前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
67 0
|
2月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
3月前
|
存储 缓存 监控
|
3月前
|
数据采集 人工智能 自然语言处理
阿里云Elasticsearch AI语义搜索:解锁未来搜索新纪元,精准洞察数据背后的故事!
【8月更文挑战第2天】阿里云Elasticsearch AI场景语义搜索最佳实践
180 5
|
3月前
|
存储 自然语言处理 API
Elasticsearch 在语音识别领域的应用
【8月更文第28天】随着语音助手和智能设备的普及,语音识别技术已经成为人们日常生活中不可或缺的一部分。Elasticsearch 作为一种高性能的搜索和分析引擎,在语音识别领域可以发挥重要作用,尤其是在提供快速准确的语音搜索结果方面。本文将介绍如何利用 Elasticsearch 来增强语音识别系统的搜索能力,并通过示例代码展示具体实现。
76 0
|
3月前
|
机器学习/深度学习 自然语言处理 搜索推荐
构建智能搜索应用:Elasticsearch与自然语言处理的融合
【8月更文第28天】随着大数据和人工智能技术的发展,用户对搜索应用的需求已经从简单的关键词匹配转向了更加智能化、人性化的交互方式。本文将探讨如何利用Elasticsearch和自然语言处理(NLP)技术构建一个能够理解用户意图并提供精准搜索结果的智能搜索系统。
218 0
|
5月前
|
存储 监控 搜索推荐
大规模数据存储与检索:Java与Elasticsearch应用
大规模数据存储与检索:Java与Elasticsearch应用

相关产品

  • 检索分析服务 Elasticsearch版