Apache Flink®就是一种这样的技术,阿里巴巴正在使用基于Flink的系统Blink来为搜索基础架构的关键模块提供支持,最终为用户提供相关和准确的搜索结果。在这篇文章中,我将介绍Flink在阿里巴巴搜索中的应用,并介绍我们选择在搜索基础架构团队中使用Flink的原因。

依据Apache Flink的实时核算引擎Blink在阿里查找中的运用 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用  大数据 Apache Flink 搜索引擎 第1张

阿里巴巴是世界上***的电子商务零售商。 咱们在2015年的年销售额总计3940亿美元,超越eBay和亚马逊之和。阿里巴巴查找(个性化查找和引荐渠道)是客户的要害进口,并承载了大部分在线收入,因而查找根底架构团队需求不断探究新技能来改善产品。

在电子商务网站运用场景中,什么能造就一个强壮的查找引擎?答案便是尽或许的为每个用户供给实时相关和精确的成果。相同一个不容忽视的问题便是阿里巴巴的规划,当时很难找到能够合适咱们的技能。

Apache Flink®便是一种这样的技能,阿里巴巴正在运用依据Flink的体系Blink来为查找根底架构的要害模块供给支撑,终究为用户供给相关和精确的查找成果。在这篇文章中,我将介绍Flink在阿里巴巴查找中的运用,并介绍咱们挑选在查找根底架构团队中运用Flink的原因。

我还将评论怎么改善Flink以满意咱们对Blink的共同需求,以及咱们怎么与data Artisans和Flink社区协作,将这些更改奉献给Flink社区。一旦成功地将咱们的修正合并到开源项目中,咱们会将现有体系从Blink转移到Apache Flink。

Part 1: Flink在阿里巴巴查找中的运用

文档创立

为用户供给***查找引擎的***步是创立可供查找的文档。在阿里巴巴的运用场景中,文档是由数百万个产品列表和相关的产品数据组成。

因为产品数据存储在许多不同的当地,所以查找文档创立也是一个很大的应战,查找根底架构团队将产品相关的一切信息汇总在一起并创立完好的查找文档。一般来说,整个进程分为3个阶段:

  1. 将不同来历(例如MySQL,分布式文件体系)的一切产品数据同步到一个HBase集群中。
  2. 运用事务逻辑将来自不同表的数据衔接在一起,以创立终究的可查找文档。这是一个HBase表,咱们称之为'Result'表。
  3. 将此HBase表导出为文件作为更新调集。

 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用 大数据 Apache Flink 搜索引擎 第2张

这3个阶段实际上是在经典的“lambda架构”中的2个不同的pipeline上运转:全量构建pipeline和增量构建pipeline。

  • 在全量构建pipeline中,咱们需求处理一切数据源,这一般是一个批处理作业。
  • 在增量构建pipeline中,咱们需求处理在批处理作业完成后产生的更新。例如,卖家或许修正产品价格或产品描绘以及库存量的改动。这些信息需求尽或许快的反应在查找成果中。增量构建pipeline一般是一个流式作业。

查找算法实时A/B测验

咱们的工程师会定时测验不同的查找算法,而且需求尽或许快地评价出效果。现在这种评价每天运转一次,因为想实时剖析效果,所以咱们运用Blink构建了一个实时A/B测验结构。

在线日志(展现,点击,买卖)由解析器和过滤器搜集和处理,然后运用事务逻辑衔接在一起。接下来聚合数据,将聚合成果推送到Druid,在Druid内部,咱们能够编写查询句子并对数据履行杂乱的OLAP剖析,并检查不同算法的效果。

 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用 大数据 Apache Flink 搜索引擎 第3张

在线机器学习

在这部分中Flink有两个运用场景。首要,咱们来评论它在产品特征实时更新中的运用。阿里巴巴查找排序中运用的一些产品特征包含产品CTR,产品库存和产品点击总数。这些数据随时刻而改动,假如能够运用***的数据,咱们就能为用户供给更相关的查找成果排序。Flink pipeline为咱们供给在线特征更新,并大大进步了转化率。

其次,每年的特定日子(如光棍节),有些产品扣头力度很大,有时乃至高达50%。因而,用户行为也会产生很大的改动。买卖量巨大,一般比咱们在平常看到的高出很多倍。曾经练习的模型在这个场景效果有限,因而咱们运用日志和Flink流式作业构建了在线机器学习模型,这个模型会将实时用户行为数据反应到体系中。成果在这些不常见但非常重要的营销节日的转换率有了很大的进步。

 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用 大数据 Apache Flink 搜索引擎 第4张

Part 2: 挑选一个结构来处理问题

挑选Flink运用到查找根底架构中,咱们在四个方面做过评价。 Flink在四个方面都满意咱们的要求。

  • 灵敏: 咱们期望能够为整个(2个pipeline)查找根底架构流程保护一套代码,因而需求一个高档的API来满意咱们的事务逻辑。
  • 一致性: 卖方或产品数据库产生的改动有必要反应在终究查找成果中,因而查找根底架构团队需求至少处理一次(at-least-once)的语义(关于公司中的一些其他Flink用例,要求正好一次(exactly-once)语义)。
  • 低推迟: 当产品库存量产生改动时,有必要赶快在查找成果中得到表现。例如咱们不想给售罄的产品给出很高的查找排名。
  • 本钱: 阿里巴巴需求处理很多数据,以咱们的集群规划,功率进步能够明显的降低本钱。因而咱们需求一个高性能、高吞吐量的结构。

一般来说,有两种办法来将批处理和流式处理一致起来。一种办法是将批处理作为根本起点,在批处理结构上支撑流式处理。这或许不契合真实意义上低推迟,因为用微批量处理(micro-batching)模仿流式处理需求一些固定的开支。因而,当企图削减推迟时,开支的份额也会相应增加。在咱们的规划上,为每个微批量处理器调度1000个使命,需求从头树立衔接并从头加载状况。因而在某种程度上,微批处理办法价值太高将变得没有意义。

Flink从另一个视点来处理这个问题,行将流式处理作为根本起点,在流式处理结构上支撑批量处理,将批处理作为流式处理的一种特殊状况。运用这种办法,不会丢掉咱们在批处理形式(批处理形式下贱是有限的)下做出的优化,你依然能够做一些批量处理上的优化。

Part 3: Blink是什么?

Blink是Flink的一个分支版别,咱们做了必定的改善以满意阿里巴巴的一些特定需求。因而,Blink在几个不同的集群上运转,每个集群有大约1000台机器,大规划集群的性能对咱们来说非常重要。

Blink的改善首要包含两个方面:

Table API更完好,因而咱们能够运用相同的SQL进行批处理和流式处理。

更强壮的YARN形式,但依然100%兼容Flink的API和更广泛的生态体系。

Table API

咱们首要增加了对用户自定义函数UDF的支撑,方便在Flink中完成共同的事务逻辑。咱们还增加了一个流对流的join的功用,因为Flink关于状况比较好的支撑,所以完成起来比较简略。咱们增加了几个聚合函数以及滑动窗口的支撑,最风趣的一个是distinct_count。

(修正注:FLIP-11涵盖了与上述功用相关的一系列Table API和SQL改善,对该主题感兴趣的能够阅览)

 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用 大数据 Apache Flink 搜索引擎 第5张

接下来,咱们将介绍运转时改善,能够分为四个不同的类别。

Yarn上的Blink

当咱们开端项目时,Flink支撑2种集群形式:standalone形式和YARN上的Flink。在YARN形式中,作业不能动态请求和开释资源,而是需求预先分配一切需求的资源。不同的作业或许同享相同的JVM进程,这有利于资源运用和资源阻隔。

Blink中每个作业都有自己的JobMaster,以依据作业需求请求和开释资源。而且不同的作业不能在同一个Java进程中运转,这将在作业和使命之间得到***阻隔。阿里巴巴团队现在正在与Flink社区协作,将这项作业奉献给开放源代码,改善作业在FLIP-6(除了YARN之外还扩展到其他集群办理器)中得到了表现。

 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用 大数据 Apache Flink 搜索引擎 第6张

Operator缩放

在出产环境中,咱们的客户端或许需求改动Operator的并行性,但一起他们不想失掉当时状况。当咱们开端运用Blink时,Flink不支撑在坚持状况的一起改动Operator的并行性。Blink引入了“bucket”的概念作为状况办理的根本单位。有比使命更多的bucket,而且每个使命将被分配多个bucket。当并行性改动时,咱们将从头分配使命的bucket。 运用这种办法,能够改动Operator的并行性并保持状况。

(编者注:Flink社区一起在Flink 1.2版别中处理了的这个问题 - 该功用在***版别的主分支中可用。Flink的“key groups”概念在很大程度上等同于上面说到的“bucket”,可是完成时运用的数据结构略有不同。更多信息,请在Jira检查FLIR-3755)

 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用 大数据 Apache Flink 搜索引擎 第7张

增量Checkpoint

在Flink中,Checkpoint操作分为两个阶段:在本地获取状况快照,然后将状况快照保存到HDFS(或另一个存储体系),而且每个快照的整个状况存储在HDFS中。咱们的状况数据太大了,这种办法是不可行的,所以Blink只存储修正的状况在HDFS中,这能够大大进步Checkpoint的功率。这种修正使咱们能够在出产环境中运用很大的状况数据。

 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用 大数据 Apache Flink 搜索引擎 第8张

异步I/O

咱们的job在出产环境中很大瓶颈在拜访外部存储器上,如HBase。为了处理这个问题,咱们引入了异步I/O,咱们将致力于为社区做出奉献,并在FLIP-12中有详细描绘。

(修正笔记:data Artisans以为FLIP-12满足强壮,能够在不久的将来在某个时刻具有自己的独立写入。所以咱们仅仅简略地介绍一下这儿的主意,假如你想了解更多,能够检查FLIP writeup)

 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用 大数据 Apache Flink 搜索引擎 第9张

Part 4: 阿里巴巴的Flink未来方案是什么?

咱们将持续优化咱们的流式job,特别是更好地处理暂时歪斜(temporary skew)和慢节点(slow machines),一起不会对反压机制(backpressure)和毛病快速康复形成影响。正如在Flink Forward大会上咱们评论的,咱们以为Flink作为批处理结构以及流式处理结构有着巨大潜力。咱们正在尽力运用Flink的批处理才能,期望在几个月内涵出产环境中运用Flink批处理形式。

会议的另一个热门话题是流式SQL,咱们将持续在Flink中增加更多的SQL支撑和Table API的支撑。阿里巴巴的事务持续增长,这意味着咱们的job会越来越大,保证咱们能够扩展到更大的集群变得越来越重要。

非常重要的是,咱们等待与社区持续协作,以便将咱们的作业奉献回开源社区,以便一切Flink用户都能从咱们参加Blink的作业中获益。咱们等待着在2017年Flink Forward大会上向您介绍咱们的发展状况。

转载请说明出处
知优网 » 根据Apache Flink的实时核算引擎Blink在阿里查找中的使用

发表评论

您需要后才能发表评论