你说的 Flink 和搜索引擎有什么关系

2024-06-12 21:58
文章标签 flink 搜索引擎 关系

本文主要是介绍你说的 Flink 和搜索引擎有什么关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要介绍如何通过 Flink 实时构建搜索引擎的索引,将从背景介绍、索引分类、实时索引架构以及一种简单的实现方法四方面分享。

1.背景介绍

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

  • 互联网搜索,如谷歌,百度等;

  • 垂直搜索,如淘宝、天猫的商品搜索;

  • 站内搜索,各个内容网站提供的站内搜索服务;

  • 企业内部搜索,员工查询企业内部信息;

  • 广告投放,根据投放上下文检索出对应的广告主和广告内容;

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

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

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

今天重点介绍索引系统,我们经常用的谷歌百度等,可能在网页发生变化的几天后才会更新索引,但在某些业务场景下,必须尽可能的缩短索引时间:

  • 比如广告投放系统,参考广告场景下的实时计算,如果广告主下线广告后没有及时更新到索引中,那投放系统依然会投放这些已经下线的广告,白白浪费资金;

  • 再比如商品搜索系统,商家修改价格后要及时反应到索引中,否则用户会感觉搜索结果跟真实商品不一致;

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

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

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

2.1 批量更新

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

2.2 实时更新

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

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

  • 批量和增量分开,可以批量更新时停掉增量更新,也可以同时跑,但这样需要维护两套逻辑;

  • 全量更新也复用增量更新的逻辑,统一架构;

这有点像之前数仓介绍中的 Lambda 架构与 Kappa 架构,参考:如果你也想做实时数仓。

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

该系统架构如下:

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

4.一种实现

我们接下来介绍一种基于云产品的简单实现方案。

该方案的数据流如上图所示:

  • 原始数据存在 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。

 

往期推荐

1、HBase最佳实践 | 聊聊HBase核心配置参数
2、Apache Hudi:剑指数据湖的增量处理框架
3、Hadoop社区比 Ozone 更重要的事情
4、MapReduce Shuffle 和 Spark Shuffle 结业篇

 

这篇关于你说的 Flink 和搜索引擎有什么关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055451

相关文章

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

在 Java 中,JDK、JRE、JVM 分别代表什么,有何关系和区别?

在Java开发的世界中,我们会经常听到JDK、JRE和JVM这三个词。它们都与Java的运行环境以及Java程序的编译和运行有关,它们之间也存在一些关联性和区别。 什么是JDK、JRE和JVM 我们来看它们分别是什么。 JDK,全称Java Development Kit,即Java开发工具包。顾名思义,JDK是用于Java开发的一套工具包,里面包含了Java的编译器javac、

53、Flink Interval Join 代码示例

1、概述 interval Join 默认会根据 keyBy 的条件进行 Join 此时为 Inner Join; interval Join 算子的水位线会取两条流中水位线的最小值; interval Join 迟到数据的判定是以 interval Join 算子的水位线为基准; interval Join 可以分别输出两条流中迟到的数据-[sideOutputLeftLateData,

1_CString char* string之间的关系

CString转char*,string string转char*,CString char* 转CString,string 一、CString转char*,string //字串转换测试 CString CString1; std::string string1; CHAR* char1=NULL; //1string1=CString1.GetBuffer();CStri

Flink SQL因类型错误导致MAX和MIN计算错误

背景 最近在做数据分析,用Flink SQL来做分析工具,因数据源的数据存在不太规范的数据格式,因此我需要通过SQL函数把我需要的数据值从VARCHAR类型的字段中把数据提取出来,然后再做MAX、MIN、SUM这些统计。怎料SUM算出来的结果准确无误,而MAX和MIN算出来的结果却始终不正确,最后发现原来是我用SQL函数提取VARCHAR类型的字段的数据,也是VARCHAR类型,所以导致MAX、

Mysql数据库约束的概述 , 逐渐约束 , 主键自增 , 表关系的概念和外键 ,多表关系约束介绍和使用

约束和表设计 1、DQL查询语句-limit语句(掌握) 目标 能够掌握limit语句的使用 讲解 作用: LIMIT是限制的意思,所以LIMIT`的作用就是限制查询记录的条数。 LIMIT语句格式: select * from 表名 limit offset, row_count;mysql中limit的用法:返回前几条或者中间某几行数据-- 1 表示分页查询的索引,对应数

【Flink metric】Flink指标系统的系统性知识:以便我们实现特性化数据的指标监控与分析

文章目录 一. Registering metrics:向flink注册新自己的metrics1. 注册metrics2. Metric types:指标类型2.1. Counter2.2. Gauge2.3. Histogram(ing)4. Meter 二. Scope:指标作用域1. User Scope2. System Scope ing3. User Variables 三.

抽象类和接口之间的关系

1。类可以实现多个接口而只能继承一个超类。 2。抽象类可以有非抽象方法而接口的方法只能都是抽象的。 3。抽象类可以定义和使用变量而接口则不可以。 4。抽象类中的方法可以有各种不同的修饰符,而接口中的方法默认都是public,不允许字面定修饰符。 一个接口中的成员函数可以在不同的类中安装,而它的成员函数可以有很多种的实现方法,但是抽象类却不能象这样,它必须是由子类来继承,然后由子类来实现它的

解析 flink sql 转化成flink job

文章目录 背景流程flink实例实现细节定义的规则定义的物理算子定义的flink exec node 背景 在很多计算引擎里,都会把sql 这种标准语言,转成计算引擎下底层实际的算子,因此理解此转换的流程对于理解整个过程非常重要 流程 flink实例 public class BatchExample {public static void main(String[

使用Flink CDC实时监控MySQL数据库变更

在现代数据架构中,实时数据处理变得越来越重要。Flink CDC(Change Data Capture)是一种强大的工具,可以帮助我们实时捕获数据库的变更,并进行处理。本文将介绍如何使用Flink CDC从MySQL数据库中读取变更数据,并将其打印到控制台。 环境准备 <dependency><groupId>org.apache.flink</groupId><artifactId>