通过Flink实时构建搜索引擎的索引

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 1.背景介绍 搜索引擎的出现大大降低了人们寻找信息的难度,已经深入到生活与工作的方方面面,简单列举几个应用如下: 互联网搜索,如谷歌,百度等; 垂直搜索,如淘宝、天猫的商品搜索; 站内搜索,各个内容网站提供的站内搜索服务; 企业内部搜索,员工查询企业内部信息; 广告投放,根据投放上下文检索出对应的广告主和广告内容; 搜索引擎的关键是让用户找到其所需信息,其整体架构如下: 从图示可知,一个搜索引擎从大的方面来看主要包括两部分,一部分是提供在线的搜索服务,一部分要把原始数据已离线的方式建立索引,建立索引是信息可搜索的前提。

案例与解决方案汇总页:
阿里云实时计算产品案例&解决方案汇总

1.背景介绍

搜索引擎的出现大大降低了人们寻找信息的难度,已经深入到生活与工作的方方面面,简单列举几个应用如下:

  • 互联网搜索,如谷歌,百度等;
  • 垂直搜索,如淘宝、天猫的商品搜索;
  • 站内搜索,各个内容网站提供的站内搜索服务;
  • 企业内部搜索,员工查询企业内部信息;
  • 广告投放,根据投放上下文检索出对应的广告主和广告内容;

搜索引擎的关键是让用户找到其所需信息,其整体架构如下:
image

从图示可知,一个搜索引擎从大的方面来看主要包括两部分,一部分是提供在线的搜索服务,一部分要把原始数据已离线的方式建立索引,建立索引是信息可搜索的前提。

注:这里的在线与离线主要指的是是否直接服务于用户,直接服务于用户的部分叫在线系统,服务于在线系统的其他系统叫做离线系统。比如搜索是在线系统,APP是在线系统,那么为搜索建立索引的系统就叫做离线系统,为APP计算某些数据指标的系统叫做离线系统。

今天重点介绍索引系统,我们经常用的谷歌百度等,可能在网页发生变化的几天后才会更新索引,但在某些业务场景下,必须尽可能的缩短索引时间:比如广告投放系统,参考广告场景下的实时计算,如果广告主下线广告后没有及时更新到索引中,那投放系统依然会投放这些已经下线的广告,白白浪费资金;再比如商品搜索系统,商家修改价格后要及时反应到索引中,否则用户会感觉搜索结果跟真实商品不一致;

2.索引:批量索引与实时索引

索引指的是是把原始数据更新到索引中去的过程,很多时候并不是原始数据的直接覆盖,而是要在这个过程中去拼接最后的文档。举个例子,电商的搜索会展示商品信息,商品销量,店铺信息等,而这些信息存在于多个业务数据库,所以需要在索引过程中把这些信息拼接起来:
image

一般情况下,索引需要持续更新,这时便有两种更新方式:

  • 批量更新

    • image
    • 由一个定时调度程序来循环调度,每次读取全量数据,处理完之后也全量更新索引
    • 该方案最大的问题是延迟,如果每次全量脚本需要跑N小时,则索引有N小时的延迟
  • 实时更新

    • image
    • 每次变化后及时更新增量信息

很多情况下这两种方式都会存在:定期全量更新,实时增量更新,但两者的协调会是一个很大的问题,需根据业务情况设计:

  • 批量和增量分开,可以批量更新时停掉增量更新,也可以同时跑,但这样需要维护两套逻辑
  • 全量更新也复用增量更新的逻辑,统一架构

这有点像之前数仓介绍中的Lambda架构与Kappa架构,参考

3.批量与增量整合的实时索引架构

该系统架构如下:
image

增量部分不变,但全量部分要做修改,定时调度,每次把全量数据导出,并且逐条按照增量的方式发送到消息队列,这就即可复用增量的逻辑。

4.一种实现

我们接下来介绍一种基于云产品的简单实现方案。
image
该方案的数据流如上图所示:

  • 原始数据存在Mysql中;
  • Mysql开启主备和binlog;
  • Logtail读取Mysql的binlog,并对其中的事件进行解析、过滤、数据解析等(具体方法见下面的描述);
  • Logtail把解析后的数据上传到日志服务(SLS);
  • 实时计算(Flink)订阅日志服务;
  • 实时计算完成数据的拼接,并把结果推送到Elasticsearch之中;

这样就完成了一个实时索引的方案。

Logtail是日志服务(SLS)的一个日志采集Agent,详情可参考日志服务产品的官方文档。它采集Binlog的原理是:伪装成Mysql的Slave节点,向 MySQL master 发送 dump 协议;MySQL 的 master 收到 dump 请求后,会将自身的 Binary log 实时推送给 Logtail。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
SQL 数据库 开发工具
实时计算 Flink版产品使用合集之数据库中有新增索引,同步任务没有报错,索引的变动是否有影响
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
存储 消息中间件 Kafka
流式湖仓增强,Hologres + Flink 构建企业级实时数仓
2023 年 12 月,由阿里云主办的实时计算闭门会在北京举行,阿里云实时数仓 Hologres 研发负责人姜伟华现场分享 Hologres+Flink 构建的企业级实时数仓,实现全链路的数据实时计算、实时写入、实时更新、实时查询。
120894 107
流式湖仓增强,Hologres + Flink 构建企业级实时数仓
|
2月前
|
SQL 存储 JSON
Flink+Paimon+Hologres 构建实时湖仓数据分析
本文整理自阿里云高级专家喻良,在 Flink Forward Asia 2023 主会场的分享。
71967 7
Flink+Paimon+Hologres 构建实时湖仓数据分析
|
2月前
|
消息中间件 SQL Kafka
实时计算 Flink版产品使用合集之构建实时数据仓库时,如何操作在几分钟内一直变化的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
SQL 存储 JSON
Flink+Paimon+Hologres 构建实时湖仓数据分析
本文整理自阿里云高级专家喻良,在 Flink Forward Asia 2023 主会场的分享。
|
2月前
|
SQL 存储 Apache
Paimon 实践 | 基于 Flink SQL 和 Paimon 构建流式湖仓新方案
Paimon 实践 | 基于 Flink SQL 和 Paimon 构建流式湖仓新方案
848 58
|
2月前
|
存储 SQL 分布式数据库
OceanBase X Flink 基于原生分布式数据库构建实时计算解决方案
OceanBase X Flink 基于原生分布式数据库构建实时计算解决方案
123 57
|
2月前
|
SQL 消息中间件 Kubernetes
flink问题之on kubernetes 构建失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
2月前
|
SQL Kubernetes Java
Flink构建问题之flink 1.11 on kubernetes构建失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
2月前
|
SQL 关系型数据库 MySQL
Flink CDC + Hudi + Hive + Presto构建实时数据湖最佳实践
Flink CDC + Hudi + Hive + Presto构建实时数据湖最佳实践
236 0

相关产品

  • 实时计算 Flink版