典型的推荐引擎架构如下:
具体应用到的技术栈有:
目录
一、ElasticSearch
二、Kafka
三、Flink
一、ElasticSearch
1、简介:
ES是一个实时的分布式存储、搜索、分析的引擎;
2、作用:
- 对模糊搜索很擅长,搜索速度很快;
- 原生就支持排序,从ES搜索到的数据可以根据评分过滤掉大部分的,只返回评分高的;
- 能匹配有相关性的记录;
3、具体实现:
输入数据到ES中时,先通过分词器进行分词,然后对分词进行排序,组成term dictionary查找时可以通过二分来查;
对term dictionary再丑一层term index,只储存词的前缀,这样可以进一步加快检索速度;
一个ES集群熵会有多个ES节点,即与运行着ES进程的机器;在所有节点中,有一个Master Node,负责维护索引元数据、切换主分片和副本分片等,若主节点挂了,会选举出一个新的主节点;
一个index的数据可以分发到不同的Node上进行储存,这个操作叫分片;分片的好处在于:使写入和查询操作可以并行执行,当数据量增长时 可以在不同节点上存储下数据;
为实现高可用性,避免发生数据丢失,分片会有主分片和副分片之分;
二、Kafka
1、简介:
Kafka是一个可以横向扩展、高可靠、处理速度快的实时数据处理系统,是一种消息中间件。
2、作用:
缓冲;
解耦消息的生产和消费;
3、具体实现:
消息队列可以实现消息中间件的功能,但有吞吐量低、topic混杂 性能很慢的问题;
Kafka通过引入Partition,采用多条队列,实现分布存储;每条队列里的消息都是相同的topic;这样就提高了吞吐量,并且避免消费者碰到不是自己想要的topic的消息了;
通过引入Broker集群,解决了高可用性的问题;每个partition不再只有一个,而是有一个leader和多个replica,生产者根据消息的topic和key值,确定了消息要发往哪个partition之后,会找到partition对应的leader,然后将消息发给leader,leader负责消息的写入,并与其余的replica进行同步。一旦某一个partition的leader挂掉了,那么只需提拔一个replica出来,让它成为leader就ok了,系统依旧可以正常运行。
三、Flink
1、简介:
Flink核心是一个流式的数据流执行引擎,针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。
2、作用:
①提供准确的结果,甚至在出现无序或者延迟加载的数据的情况下。
②它是状态化的容错的,同时在维护一次完整的的应用状态时,能无缝修复错误。
③大规模运行,在上千个节点运行时有很好的吞吐量和低延迟。
3、具体实现:
主要分为JobManager和TaskManager;
JobManager主要负责调度task,协调checkpoint以及错误恢复等。
TaskManager是执行数据流的task,一个task通过设置并行度,可能会有多个subtask。
可以处理无界数据流和有界数据流两种格式的数据。
参考:
【1】什么是 Elasticsearch?一篇搞懂 - 云+社区 - 腾讯云
【2】Kafka简明教程 - 知乎
【3】深入理解Apache Flink核心技术 - 简书
【4】Flink(一)-基本概念 - 知乎



