Blink:阿里巴巴如何使用Apache Flink

这是阿里巴巴搜索基础设施团队高级总监Xiaowei Jiang的客座文章。这篇文章改编自阿里巴巴在Flink Forward 2016上的演讲,你可以在这里看到会议的原始演讲

阿里巴巴是全球最大的电子商务零售商。我们2015年的年销售额总计3940亿美元 - 超过eBay和亚马逊的总和。阿里巴巴搜索是我们的个性化搜索和推荐平台,是我们客户的关键切入点,负责我们的大部分在线收入,因此搜索基础架构团队不断探索改进产品的方法。 是什么让电子商务网站上的搜索引擎变得更好?实时的结果对于每个用户而言尽可能相关且准确。

在阿里巴巴的规模上,这是一个非常重要的问题,很难找到能够处理我们用例的技术。 ApacheFlink®就是这样一种技术,阿里巴巴正在使用基于Flink的系统Blink,为其搜索基础设施的关键方面提供支持,并为最终用户提供相关性和准确性。

在这篇文章中,我将介绍Flink在阿里巴巴搜索中的角色,并概述我们选择在搜索基础架构团队中与Flink合作的原因。 我还将讨论如何通过Blink调整Flink以满足我们的独特需求,以及我们如何与数据工匠和Flink社区合作,将这些更改贡献给Flink。一旦我们成功将我们的修改合并到开源项目中,我们正在积极地将我们的系统从Blink转换为vanilla Apache Flink。

第1部分:阿里巴巴搜索中的Flink

文档创建

为用户提供世界级搜索引擎的第一步是构建可供搜索的文档。在阿里巴巴的案例中,该文件由数百万个产品清单和相关产品数据组成。 搜索文档创建是一项挑战,因为产品数据存储在许多不同的地方,并且由搜索基础架构团队将所有相关信息汇集在一起​​以创建完整的搜索文档。一般来说,这是一个3阶段的过程:

  1. 将来自不同来源(例如MySQL,分布式文件系统)的所有产品数据同步到一个HBase集群中。
  2. 使用业务逻辑将来自不同表的数据连接在一起,以创建最终的可搜索文档。这是一个HBase表,我们称之为'Result'表。
  3. 将此HBase表导出为文件或一组更新。
阿里巴巴搜索 - 基础设施介绍

所有这三个阶段实际上都在经典的“lambda架构”中的2个不同的管道上运行:完整构建管道和增量构建管道。

  • 在完整构建管道中,我们处理所有数据源,这通常是批处理作业。
  • 在增量管道中,我们处理批处理作业完成后发生的更新。例如,卖家可以修改价格或描述,或者库存可用性可能会发生变化。此信息必须尽快反映在搜索结果中。增量构建管道传统上是流工作。

搜索算法的实时A/B测试

我们的工程师定期测试不同的搜索算法,并且需要能够尽快评估性能。现在,这个评估每天发生一次,但我们想要实时进行分析,因此我们使用Blink构建了一个实时的A/B测试框架。在线日志(展示,点击,事务)由解析器和过滤器收集和处理,然后使用某些业务逻辑连接在一起。接下来,聚合数据,并将聚合结果推送给德鲁伊; 在德鲁伊内部,可以编写一个查询来对数据执行复杂的OLAP分析,并查看不同算法的执行情况。
阿里巴巴实时-AB-测试

在线机器学习

这里有几个应用程序,首先,我们将讨论实时功能更新。阿里巴巴搜索排名中使用的一些功能包括产品点击率,产品库存和总点击次数。这些数据会随着时间的推移而变化,如果我们可以使用最新的可用数据,我们将能够为用户提供更相关的搜索排名。我们的Flink管道为我们提供在线功能更新,并大大提高了转换率。 其次,一年中有特定的日子(如单身日))产品大幅折扣 - 有时高达50% 。 因此,用户行为发生了巨大变化。交易量巨大,通常比我们在正常日子看到的高很多倍。我们之前训练过的模型在这种情况下毫无用处,因此我们使用我们的日志和Flink流媒体作业来支持在线机器学习,构建考虑实时数据的模型。结果是这些不常见但非常重要的销售日的转化率要高得多。

阿里巴巴,在线机器学习

第2部分:选择一个框架来解决问题

当我们选择Flink为我们的搜索基础设施提供支持时,我们的评估包括以下四个类别。Flink满足了我们四个方面的要求。

  • 敏捷性:我们的目标是能够为整个(2管道)搜索基础架构流程维护一个代码库。我们想要一个足够高级的API来表达我们的业务逻辑。
  • **一致性: **对卖方或产品数据库的更改必须反映在最终搜索结果中,因此搜索基础架构团队需要至少一次语义(对于公司中的其他一些Flink用例,我们只有一次要求)。
  • 低延迟:当库存可用性发生变化时,必须非常快速地反映在搜索结果中; 例如,我们不希望对售罄的产品给出高搜索排名。
  • 成本:阿里巴巴处理大量数据,在我们的规模上,效率提升可显着节省成本。我们需要一个能够有效处理高吞吐量的框架。

更广泛地说,有两种方法可以考虑统一批处理和流处理。第一种方法是使用批处理作为起点,然后尝试在批处理之上构建流。但是,这可能无法满足严格的延迟要求,因为模拟流的微批处理需要一些固定的开销 - 因此,当您尝试减少延迟时,开销的比例会增加。在我们的规模上,需要为每个微量接头安排1000个任务,重新建立连接,并重新加载状态。因此,在某些时候,微批方法变得过于昂贵而无法理解。 另一方面,Flink使用流媒体作为基本起点,并在流媒体之上构建批处理解决方案,批处理基本上是流的特殊情况。使用这种方法,我们不会在批处理模式下失去优化的好处 - 当流是有限的时,您仍然可以进行任何您希望进行批处理的优化。

第3部分:什么是Blink?

Blink是Flink的分支版本,我们一直在努力满足我们在阿里巴巴的一些独特要求。此时,Blink正在几个不同的集群上运行,每个集群大约有1000台机器,因此大规模的性能对我们来说非常重要。 Blink的改进通常包括两个方面:

  • 使Table API更加完整,以便我们可以为批处理和流式传输提供相同的SQL
  • 更强大的YARN模式仍然与Flink的API和更广泛的生态系统100%兼容

表API

我们首先添加了对用户定义函数的支持,以便将我们独特的业务逻辑轻松地引入Flink。我们还添加了一个流到流的连接,这是一项非常重要的任务,但由于Flink对州的一流支持,在Flink中相对简单。接下来,我们添加了一些不同的聚合,最有趣的可能是distinct_count,以及窗口支持。 (编者注:FLIP-11涵盖了与上面列出的功能相关的Flink的一系列Table API和SQL改进,建议读者阅读对该主题感兴趣的任何人。)

Blink表-API改进

接下来,我们将介绍运行时改进,我们可以进入四个单独的类别。

Blink on Yarn

当我们开始我们的项目时,Flink支持2种集群模式:独立模式和YARN上的Flink。在YARN模式下,作业无法动态请求和释放资源,而是需要预先获取所有必需的资源。并且不同的作业可能共享相同的JVM进程,这有利于资源利用而不是资源隔离。 Blink包含一个体系结构,其中每个作业都有自己的JobMaster,可根据作业的要求请求和释放资源。并且不同的作业不能在同一个Java进程中运行,从而在作业和任务之间产生最佳隔离。阿里巴巴团队目前正在与Flink社区合作,将这项工作贡献给开源,并且FLIP-6(除了YARN之外还扩展到其他集群管理器)可以获得改进。

闪烁上纱

Operator Rescale

在生产中,我们的客户可能需要改变运营商的并行性,但与此同时,他们不想失去状态。当我们开始研究Blink时,Flink不支持在保持状态的同时改变运算符的并行性。Blink将“桶”概念作为国家管理的单位。存在比任务更多的存储桶,并且每个任务将被分配多个存储桶。当并行性发生变化时,我们会将桶重新分配给任务。使用此方法,可以更改运算符的并行性并维护状态。

编者注: Flink社区同时为Flink 1.2解决了这个问题 - 该功能在最新版本的主分支中可用。Flink关于“关键组”的概念在很大程度上与上面提到的“桶”相同,但实现方式略有不同,数据结构如何支持这些桶。有关更多信息,请查看Jira中的FLINK-3755。)

Blink运营商的重新调整

增量检查点

在Flink中,检查点分两个阶段进行:在本地拍摄状态快照,然后将状态快照保存到HDFS(或其他存储系统),并且状态的整个快照与每个快照一起存储在HDFS中。我们的状态太大,不能接受这种方法,因此Blink只将修改后的状态存储在HDFS中,并且我们已经能够大大提高检查点效率。这种修改使我们能够在生产中使用大型状态。

Blink增量检查点

异步I / O.

许多工作的生产瓶颈是访问HBase等外部存储。为了解决这个问题,我们引入了异步I / O,我们将致力于为社区做出贡献,并在FLIP-12中进行了详细介绍。 (编者注:数据工匠认为FLIP-12足够大,可以在不久的将来在某个时候单独写一篇文章。所以我们只是简单介绍一下这个想法,暂时你应该看看如果您想了解更多内容,请参阅FLIP文章。在发布时,代码已经提供给Flink。)

Blink异步IO

第4部分:阿里巴巴Flink的下一步是什么?

我们将继续优化我们的流媒体作业,特别是更好地处理临时偏斜和慢速机器,而不会否定背压的积极方面和更快的故障恢复。正如Flink Forward的一些不同发言人所讨论的那样,我们认为Flink作为批处理器和流处理器具有巨大的潜力。我们正在努力充分利用Flink的批处理功能,并希望在几个月内实现Flink批处理模式。 会议的另一个热门话题是流式SQL,我们将继续在Flink中添加更多的SQL支持和Table API支持。阿里巴巴的业务继续增长,这意味着我们的工作变得越来越大 - 确保我们可以扩展到更大的集群变得越来越重要。 非常重要的是,我们期待继续与社区合作,以便将我们的工作贡献回开源,以便所有Flink用户都能从我们在Blink中投入的工作中受益。我们期待在Flink Forward 2017上向您介绍我们的进展情况。

本篇文章翻译自 https://www.ververica.com/blog/blink-flink-alibaba-search

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容