`
大涛学长
  • 浏览: 110747 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

趣头条基于 Flink 的实时平台建设实践

阅读更多
本文由趣头条实时平台负责人席建刚分享趣头条实时平台的建设,整理者叶里君。文章将从平台的架构、Flink 现状,Flink 应用以及未来计划四部分分享。

一.平台架构
------

### 1.Flink 应用时间线

![1](https://yqfile.alicdn.com/a8f5abf2ed981e744554d6759e2eff4abb904541.jpeg)

首先是平台的架构,2018 年 3 月之前基本都是基于 Storm 和 Spark Streaming 来做的。目前,基本已经把 Spark Streaming 和 Storm 淘汰了,主要都是 Flink SQL 来做的。起初还比较传统,一般是接需求然后开发类似于 Flink SQL 的任务,基本是手工作坊操作模式。

后来 Flink SQL 的任务逐渐多了起来,就开始考虑往平台化方向发展。大概在 2018 年 10 月份,我们开始搭建实时平台。当时设计实时平台时就直接抛弃了 Spark Streaming 和 Storm,基础理念设计的时候,主要以 Flink 场景来设计平台。趣头条实时平台上线将近两个月后,当时任务量并不多,由于趣头条基本都是 PHP 和 Golang 开发语言,而Flink更偏向于 Java 包括它 API 的提供,所以经常会接到用户需求,如: Golang 能不能开发, PHP 能不能开发?

这个问题听起来比较奇怪,但是对于不会用并且确实也想用的用户,就需要想办法解决这个问题。后来我们做了一版类似于 Flink SQL 配置化开发,可以让用户不用写Flink 代码,初衷是考虑到操作门槛如果相对高,那么 Flink 在趣头条的应用推进就不会这么顺畅。这也是 1.0 的配置开发诞生的背景。

在以上三件事情完成后,这个平台基本就能提供给有开发能力的同学开发一些 Flink 任务,同时类似于分析师、优秀的产品等没有开发能力的的同学也知道 Flink,他们更关心每天曲线的变化,可以根据数据对一些产品做相应的策略调整,能够自己配比较简单的 SQL 化任务。

在此之后,平台任务逐渐增多,就开始做实时平台的分布式,包括多集群。单集群因为部分部门的任务要求较高,至少要达到三个九的标准,所以当时设计的时候就考虑到要支持 Flink 多集群,后期比如说 A 集群故障了,可以让用户立马切到B集群发布,两集群保持互通,底层 Checkpoint 是可以实时同步的。

到了 19 年 6 月份,1.0 配置化开发的方案不是更抽象的,或者说不是 Flink 工程化的结构,后来也参考 Flink 的开源分支 Blink 并参考 Blink 自己实现了一版类似于 Blink 的方案,之后基本在配置化开发这一块可以推广给代码开发的同学,因为他们可能对 Source 的源跟 Sink 源,包括一些数据中间环节的处理流程,比产品和分析师稍微了解的相对较多。

### 2.集群及任务量

![2](https://yqfile.alicdn.com/9419b0f6edfcaaf467a4b88ab417efb7f79037ea.jpeg)

这个是目前集群的规模,CPC 集群差不多是 30 个节点,采用了 Flink on Yarn 的这种模式,这个是独立的计费集群,会有一些广告商的点击计费统计。当时这个定的时候,会是由两个集群去跑两个任务,类似于 HA,它可以在应用层面去做降级。比如说集群挂了,它还可以在另外公共集群也会有任务。这样的话就是说如果出问题,至少不会两个集群同时出问题,这种概率应该是比较小。

公共集群现在是 200 多个节点,到今年 10 月左右,节点数可能会增至 400 到 500 个左右。目前 Kafka 也是有多副本集群的,后续 Kafka 的数据流的转换,也是通过 Flink 去实现可配置化的方式数据导流,比如 Kafka 是公司数据流的核心的链路之一,如果出问题的话会导致整个影响所有的依赖于上下游这种数据消费。目前 Kafka 那边会有多副本集群这种概念,那 Flink 在中间扮演的就是我可以把这个数据流实时的同步到不同的集群去做,类似于做容灾的方案。

### 3.数据流架构

公共集群 Flink 的任务目前是 200 多,然后 CPC 是十多个任务,下面为数据流结构数据源基本来自于手机端 H5 还有服务端。然后中间会有一层 Log Server 这个是公司自己开发的,全部打到了 Log Server 之后,Log Server 会打到 Kafka,Kafka 也是多链路,有主副本集群这种概念,中间环节在之前是有 storm 和 spark,目前 100% 都是 Flink。

![3](https://yqfile.alicdn.com/103b63789f0013daa595e4c749958b1316d47e68.jpeg)

接下来就是 Sink 出来以后的数据,目前用的种类还是挺多的,包括 MySQL, Clickhouse,Cassandra, Elasticsearch 包括也会落部分 Hadoop 到 HDFS 还有 Prometheus。再往后主要是基于后续落的数据做了一些类似于企业级的应用,最上面 Dashboard 是大屏,一般是用来显示数据流的大屏。第二个是基础部门的性能指标。

最下面是数据入库,下面是机器学习使用,目前 TensorFlow 基本是通过 Flink 拼接样本清洗一些数据,然后落一些 TensorFlow 的数据结构出来,再通过 TensorFlow 做机器学习的训练。

### 4.平台架构

![4](https://yqfile.alicdn.com/48eee7f1f9bd300ddd19eeaaaff30ddbd5087572.jpeg)

以上为趣头条的平台架构,之前也是单节点,只能做集群的任务发布,目前改造成提供给用户的 HA 架构,中间开发一层类似于发布机器的概念,上面部了 Flink Gateway 即每集群在同样的 Gateway 上是可以随意切换的,比如说 Server 1,Server 2,Server 3,三个环境是一样的,后续如果需要扩容,也只需要去扩 Flink Gateway,同样的再去部署一套就行了。

再下面 Flink Gateway 可以往 Hadoop 集群上发,比如目前用的是 Hadoop Yarn,是两个集群,即 Gateway 可以任意切换到这两个集群发布任务。后续就是通过Filebeat将任务所有运行的记录及日志收集上来。收集完成之后也有基于Flink开发的通用日志统计和分析的工具,将数据落到ELK(Elasticsearch + Logstash + Kibana,以下简称 ELK)里,然后提供给用户。比如,用户任务上线之后可能会出现一些异常,包括统计等都会接到ELK里面,由 ELK 提供可视化的界面,这个就是平台的架构。

二.Flink 应用
----------

### 1.应用场景

![5](https://yqfile.alicdn.com/f79946872c05a6fec51845088d0fd721e66ab74f.jpeg)

第二部分就是 Flink 目前在基分的应用,除了趣头条,米读、米读极速版跟萌推目前这些产品包括数据流的统计,数据中间处理环节,基本已经换到 Flink 来了,支撑整个集团的产品。业务场景大概主要是计费、监控、仓库,画像包括算法、内容线六部分。

*   计费主要是算广告商接入的计费成本,跟他们进行结算。每次广告点击完成后,每个月可能会有类似于离线报表,目前如果需要切换成实时,基本只需要点击,就会产生扣费环节,这个算是非常核心的任务。
*   监控有各种,比如说机器层面的,应用层面的。
*   仓库目前基本是批量落数据,比如说五分钟、十分钟,类似于窗口的间隔时间去落数据
*   画像即将用户画像的一些数据通过 Flink 清洗,完成之后会落到 HDFS 上,用来做训练。
*   算法目前除了用户画像,还有推荐,目前的 APP 打开之后会给不同用户推荐不同的内容。
*   内容线目前做的是风控,可能有一些用户知道 APP 会去刷金币,比如说打开某个内容之后,不看内容而可能是在后台跑一百多个程序刷金币,目前通过 Flink 可以做到实时风控,能实时识别出某台设备究竟是不是真正的用户,如果不是,就会将其屏蔽掉。

### 2.用户声音

*   Flink 能用 Python/Golang 开发吗?
*   Flink 好学吗?
*   我就会 SQL 可以用吗?
*   有没有更简单的方式?

以上四个问题是目前接触到的公司内部用户在 Flink 应用时经常会提到的,包括最初去推实时平台时,可能很多人都会问 Flink 怎么用、能否用 Python 或者 Golang 进行开发,或者仅会 SQL 不会写代码也想用等。

Flink 究竟好不好用?给业务线培养 Flink 的开发人员所面临情况在于部分业务线确实知道 Flink,但是没有 Java 的背景,语言上主要写 Golang,或者每个月需要对产品进行一些策略的调整,但如果没有数据去看,基本就是摸黑的,无法评估策略调完之后可能会给产品带来什么样的影响。

### 3.解决方案

针对以上问题,我们也拿出了解决方案。在第一版的时候,用户只需要写 SQL,即会有类似于内存里的宽表,Flink 把从 Kafka 消费过来的数据抽象成内存的一张表,用户只需要打开如下界面根据自己的逻辑去写自定义 SQL,就可以提供给产品和分析师,包括其他想用平台的用户。有了这个解决方案之后,其他用户就可以通过简单的方式来体验到 Flink 带来便捷。

![6](https://yqfile.alicdn.com/2146659d30fe5e5185bc83bdbd5de8625c14c055.jpeg)

SQL 配置化 1.0 版本中 SQL 是有限制的,测试显示如果提供给用户写的 SQL 越来越多,Checkpoint 的压力,与 distinct 的这种计算结果会带来数据倾斜的这种压力,导致任务可能会失败,所以在设计 SQL 代码量时有一定的限制,不会让用户无休止的加 SQL,基本目前限制是 10 个。在 1.0 版本上线之后,刚好 Blink 开源出来了,我们知道 1.0 方案还是不够优雅(从工程化看),又参考 Flink 和开源出来的 Blink 方案,升级到了第二版,可以更大化的提供用户自定义的方式,也可以把数据源抽象出来,数据源就不仅仅是 Kafka 了,很大程度上改善了原来 1.0 的版本。当所有的数据来了之后先到 Kafka,目前数据源可以支持 HDFS、MySQL、MQ 等,只需要创建 Source 源的概念。下面是平台较详细的截图,基本是输入,输出以及统计逻辑。

![7](https://yqfile.alicdn.com/fcaa5bb94a67f25d6174fc3bfd4eea69ad9c42b9.jpeg)

目前跟 Blink 基本如出一辙,也是参考了 Blink 的一些设计思路和方法。这个功能已经上线,基本有五、六十个任务已经在用了,用户对当前的平台还是比较满意的。不过更期望写 SQL 基本就能完成统计指标,这也是实时平台后续想要去做的(尽可能的再去屏蔽一些资源设置比如:tm/slot 一般用户不太懂)。

![10](https://yqfile.alicdn.com/5ef45c02795ce58bb43193f4ed16952e470b3827.jpeg)

三.现状
----

![11](https://yqfile.alicdn.com/aed357842053cb67deec07b7b4bbadc0f888bd55.jpeg)

第三部分是想分享一下趣头条实时平台的现状,目前 Flink 1.9 版本已经出来了,我们在测 Flink 1.9 的新特性,Flink 对 Python 的支持是非常惊喜的,内部很多用户还是比较喜欢脚本式语言的,而 Python 的开发是写脚本式语言,就能提交 Flink 任务,这是我们当前测试内容的一部分。另一部分是 Flink 模板简化,上面提到的 2.0 模板,让用户写一大堆的 SQL,还是比较麻烦的,用户还是更倾向于统计逻辑的简单 SQL。我们最终的目标还是想把 Flink 推广到整个集团公司,让更多的受众参与进来享受 Flink 带来的好处。

最后一块是 Flink SQL 的 HDFS 落库,目前这个功能开发完了,目标是将 Kafka 出来的数据做类似的实时仓库,即数据可以实时落到 HDFS 上,而上一个版本是通过 Flink 开发,基本是按时间窗口去落的还不是实时的。

四.未来计划
------

![12](https://yqfile.alicdn.com/1cd533d370f7f7d1455f54fff3714348c4990998.jpeg)

**首先,版本升级**,趣头条的实时平台目前用的是 Flink 1.7,后续是想往 1.9 版本去切,Flink 1.9 版本提供的 Task Fault Tolerance 的容错、Checkpoint 的容错等很好的修复了 1.7 版本中存在的问题。

**第二,实时仓库**,趣头条当前用到的 Flink 按时间窗口落可能数据也不是实时的,后续想让它做到类似于秒级数据流入,体大提升仓库服务数据能力。

**第三,平台智能诊断**,当前工作中更大一部分时间是在解答用户问题,用户在使用中出现的各种报错无法自行解决,需要平台提供技术上的支持,这部分其实比较影响平台规划的目标方向的进度,因此后面想开发平台智能诊断。常见的报错和最佳实践都归纳下来集成到平台中。出现问题时能够自动诊断识别推荐给用户解决方案。

**第四,Flink 弹性式资源计算**,这是目前面临的比较重要的问题。目前 300 多个任务,集群的规模增长也比较迅猛,大约每周将近 20 台机器的扩容速度,后续的资源利用率也是非常重要的。目前我了解 Flink 社区是没有类似于这种弹性式资源计算,也期待社区能解决这类问题。比如:Flink 任务起来之后,可能业务方已经将流已经停掉了,如果用户不去看这个任务,其实他还是在跑。最终内存、资源还是被占着,没有释放。

**最后是 Flink 机器学习实践**。目前机器学习平台基本用的还是批训练,后续还是想去做一些尝试 Demo 方案,提供给机器学习团队,争取他们可以后续往 Flink 方向切换。

 

 

 

 

[原文链接](https://yq.aliyun.com/articles/726235?utm_content=g_1000087747)

本文为云栖社区原创内容,未经允许不得转载。
分享到:
评论

相关推荐

    基于Flink的实时数仓建设实践.docx

    基于 Flink 的实时数仓建设实践 本文主要介绍了基于 Flink 的实时数仓建设实践经验,介绍了美团如何使用 Flink 引擎构建实时数据仓库,并提供高效、稳健的实时数据服务。 知识点 1:实时数据仓库的需求 随着企业...

    基于 Flink 的实时数仓建设实践.pdf

    基于 Flink 的实时数仓建设实践 本文主要阐述了美团基于 Flink 的实时数仓建设实践经验。实时数仓是企业对数据服务实时化服务的需求逐渐增多的解决方案。本文将从 Flink 引擎的性能特点和适用场景出发,介绍美团...

    基于flink的实时流计算web平台.zip

    flink基于flink的实时流计算web平台.zip 基于flink的实时流计算web平台.zip基于flink的实时流计算web平台.zip基于flink的实时流计算web平台.zip基于flink的实时流计算web平台.zip基于flink的实时流计算web平台....

    基于Flink构建实时数据仓库.pptx

    基于 Flink 构建实时数据仓库 本文将介绍基于 Flink 构建实时数据仓库的知识点,包括 Flink 的基本概念、Flink SQL 的扩展工作、实时数据仓库的应用案例、Apache Flink 的未来工作思考与展望等。 一、Flink 基础...

    快手基于 Flink 构建实时数仓的场景化实践.pdf

    基于 Flink 的实时数仓场景化实践 ...快手基于 Flink 构建的实时数仓场景化实践,提供了一个高效、稳定、可扩展的实时计算平台,满足了快手的实时计算需求,并提供了多种数据源的接入和处理能力。

    基于 TiDB 与 Flink 的实时数仓最佳实践的白皮书.pdf

    首先,从标题“基于 TiDB 与 Flink 的实时数仓最佳实践的白皮书.pdf”来看,该白皮书主要涉及的知识点应包括TiDB与Flink的使用,以及它们在构建实时数据仓库方面的最佳实践。 TiDB是一款开源的分布式关系型数据库,...

    基于Flink实时数仓实践.pptx

    基于Flink实时数仓实践.pptx

    基于Flink+FlinkCDC+FlinkSQL+Clickhouse构建实时数据仓库2022

    分享一套flink实时数仓的课程——《基于Flink+FlinkCDC+FlinkSQL+Clickhouse构建实时数据仓库》,2022年10月完结的新课,课程基于flink1.14版本,视频+源码+课件+软件包,一起提供下载!

    网易云音乐基于flink的实时平台实践.pdf

    标题为《网易云音乐基于flink的实时平台实践.pdf》,表明文档的主体内容将围绕网易云音乐公司如何运用Apache Flink构建实时数据处理平台进行展开。描述部分“网易云音乐基于flink的实时平台实践”再次确认了主题内容...

    最新 大数据-Flink实时旅游平台(精华版)

    课程主要讲解项目环境篇:项目依赖环境的安装部署,项目数据准备篇:项目中所使用的数据介绍和准备,项目分析篇:项目中涉及的模块及指标介绍和研发,项目数据服务篇:项目中分析出来的...│ 26 环境篇之flink的his

    基于Flink+FlinkCDC+FlinkSQL+Clickhouse构建实时数据仓库(2022新课,基于flink1.14)

    《基于Flink+FlinkCDC+FlinkSQL+Clickhouse构建实时数据仓库》——本课程为大数据实时数仓项目实战课程,以大数据实时数仓项目为主线,理论和实战相结合,全方位、全流程、无死角讲解数仓项目的数仓基础、项目规划、...

    贝壳找房基于 Flink 的实时平台建设.pdf

    贝壳找房基于Flink的实时平台建设是大数据处理领域的一个重要实践,旨在利用Apache Flink这一流处理框架,构建高效、稳定、实时的数据分析系统。Flink作为一个强大的开源流处理引擎,能够处理无界和有界数据流,提供...

    美团点评基于Flink的实时数仓建设实践

    我们采用的是“一路到底”的开发模式:通过在实时计算平台上部署Storm作业处理实时数据队列来提取数据指标,直接推送到实时应用服务中。但是,随着产品和业务人员对实时数据需求的不断增多,新的挑战也随之发生。...

    作业帮基于Flink的实时计算平台实践-Flink Forward Asia 2021.pdf

    《作业帮基于Flink的实时计算平台实践》 在大数据处理领域,Flink作为一款流行的开源流处理框架,因其高效、稳定和强大的实时计算能力,被广泛应用在各种业务场景中。作业帮作为在线教育行业的领军企业,也充分利用...

    基于Flink的大数据实施城市交通监控平台.zip

    标题中的“基于Flink的大数据实施城市交通监控平台”揭示了这个项目的核心是利用Apache Flink这一流处理框架,来构建一个大数据驱动的城市交通监控系统。这个系统旨在收集、处理和分析实时的城市交通数据,以优化...

    基于Flink构建实时数仓的场景化实践.pdf

    基于Flink构建实时数仓的场景化实践 本文档旨在介绍基于Apache Flink构建实时数仓的场景化实践,主要涵盖快手基于Flink构建实时数仓的架构设计、保障措施、场景问题及解决方案等方面。 实时数仓架构设计 实时数仓...

    如何基于Flink+TensorFlow打造实时智能异常检测平台

    本文整理自携程实时计算负责人潘国庆在QCon全球软件开发大会(北京站)2019的演讲,他介绍了携程如何基于Flink与TensorFlow构建实时智能异常检测平台,以解决规则告警系统准确率低、时效性低、规则配置复杂与耗费人力...

Global site tag (gtag.js) - Google Analytics