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

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

一.平台架构

1.Flink 应用时间线

首先是平台的架构,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.集群及任务量

这个是目前集群的规模,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。

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

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

4.平台架构

以上为趣头条的平台架构,之前也是单节点,只能做集群的任务发布,目前改造成提供给用户的 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.应用场景

第二部分就是 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 带来便捷。

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 源的概念。下面是平台较详细的截图,基本是输入,输出以及统计逻辑。

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

三.现状

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

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

四.未来计划

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

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

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

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

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

11 月 28-30 日,趣头条的王金海老师将出席于北京国家会议中心举办的 Flink Forward Asia 2019,并分享《趣头条基于 Flink+ClickHouse 构建实时数据分析平台》,大会倒计时 21 天,还没报名的同学抓紧时间啦~

届时,阿里、腾讯、美团、字节跳动、百度、英特尔、DellEMC、Lyft、Netflix 及 Flink 创始团队等近 30 家知名企业资深技术专家齐聚国际会议中心,与全球开发者共同探讨大数据时代核心技术与开源生态。


双11福利来了!先来康康#怎么买云服务器最便宜# [并不简单]参团购买指定配置云服务器仅86元/年,开团拉新享三重礼:1111红包+瓜分百万现金+31%返现,爆款必买清单,还有iPhone 11 Pro、卫衣、T恤等你来抽,马上来试试手气  https://www.aliyun.com/1111/2019/home?utm_content=g_1000083110

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我!程序猿!被银行套路了!

作者 | 程序猿石头责编 | Carol封图 | CSDN 付费下载自视觉中国话说,你肯定也经常收到各个银行电话推销,可以办理小额贷款/信用卡账单分期/万用金,或者其他乱七八糟的名字的产品。又或者接到电话说,“石头先生,我们有留…

巧妙地在Windows搭建node服务器

夫陶公清风千古,余又何人,敢称庶几 文章目录一、 安装node1. 官网下载node.js2. 测试npm是否成功安装3. 配置npm模块和缓存的存放路径4. 安装express5. 配置npm环境变量二、安装cnpm1.执行安装2. 配置cnpm环境变量一、 安装node 1. 官网下载node.js 官…

jdk8下载

文章目录1. 官网2. windows下载链接3. linux下载链接1. 官网 https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html 2. windows下载链接 https://download.oracle.com/otn/java/jdk/8u301-b09/d3c52aa6bfa54d3ca74e617f18309292/jdk-8u301-window…

测试工程师不懂AI,还有未来吗?

阿里妹导读:近几年人工智能、机器学习等词漫天遍地,似乎有一种无AI,无研发,无AI,无测试的感觉。有人说:不带上“智能”二字,都不好意思说自己是创新。我们先暂且不评论对错,只探讨这…

redis 下载、启动 windows环境

文章目录1. 下载2. 启动1. 下载 https://github.com/MicrosoftArchive/redis/releases 2. 启动 进入redis的bin目录双击redis-server.exe

Aruba发布业界首款服务智能边缘的云原生平台Aruba ESP

利用AI 和自动化技术打造智能网络;支持业务连续性任务,驾驭未来智能边缘 慧与公司旗下的Aruba今日推出业内首款 AI 驱动的云原生平台 Aruba ESP(边缘服务平台),该平台建立在AIOps、零信任网络安全和统一架构基础上&am…

axios的安装和使用

文章目录一、axios介绍二、安装axios三、 案例四、框架整合五、插件一、axios介绍 什么是 axios? Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 特性: 1、从浏览器中创建 XMLHttpRequests 2、从 node.js 创建 http 请求 3、支持 Promise AP…

达摩院最新AI技术助力天猫双11,提供接近真人的语音交互体验

11月8日,记者了解到,阿里巴巴达摩院机器智能实验室最新研究成果——KAN-TTS将首次大规模应用于今年天猫双11,基于该技术,菜鸟热线机器人、语音机器人小蜜以及天猫精灵将为全球消费者提供接近真人的语音交互体验。 让机器开口说话…

make[1]: *** [objs/Makefile:445: objs/src/core/ngx_murmurhash.o] Error

执行完make以后报错 make[1]: *** [objs/Makefile:445: objs/src/core/ngx_murmurhash.o] Error 1 make[1]: Leaving directory /app/nginx-1.9.9 make: *** [Makefile:8: build] Error 2解决办法 找到对应的Maakefile文件(我的在 /nginx/objs/Makefile&#xff09…

原来记录系统日志那么简单【Java】【SpringBoot】【Mybatis Plus】【AspcetJ】

夫陶公清风千古,余又何人,敢称庶几 文章目录前言一、系统日志是什么二、开发技术三、开发步骤3.1引入依赖坐标3.1.1 导入Lombok3.1.2 数据库连接依赖3.1.3 spring aop依赖3.1.4 aspectJ依赖3.1.5 Druid连接池(阿里巴巴)3.1.6 myb…

程序员风光背后:从零到今日头条数据分析师,我走了1年!

笔者最近在今日头条上,看到了头条员工的自述:“从什么都不懂的小白,到入职头条成为数据分析工程师,我走了1年的时间。”评论区却炸锅了!大家不明白,1年时间为什么要学这个?半年时间学Java不香吗…

前端内存优化的探索与实践

引言 标注是地图最基本的元素之一,标明了地图每个位置或线路的名称。在地图 JSAPI 中,标注的展示效果及性能也是需要重点解决的问题。 新版地图标注的设计中,引入了 SDF ( signed distance field)重构了整个标注部分…

直播:AI时代,普通程序员该如何转人工智能(限免报名)

常常有小伙伴在后台反馈:想了解人工智能,但是该怎么学?自学难度大又没有效果,该怎么办?CSDN为了解决这个难题,联合唐宇迪老师为大家带来了一场精彩的直播【年薪百万AI工程师亲授:小白实战培养计…

核心系统100%上云!全球最大流量洪峰,阿里云扛住了

2019天猫双11 96秒成交额破100亿 全球最大流量洪峰 每秒订单峰值54.4万笔 阿里巴巴核心系统 100%上云 我们扛住了! 1心1役 把不可能变成可能 今晚为阿里工程师疯狂打call! 原文链接 本文为云栖社区原创内容,未经允许不得转载。

如何通过可视化的方式实现Linux和Windows互相传送文件[命令]

文章目录🎵安装🎵使用💖1.上传文件💖2. 下载文件🎵总结🎵安装 【Centos】 yum install -y lrzsz🎵使用 💖1.上传文件 rz -y💖2. 下载文件 sz filename🎵…

万字长文丨1分36秒,100亿,支付宝技术双11答卷:没有不可能

2019年双11来了。1分36秒100亿,5分25秒超过300亿,12分49秒超500亿……如果没有双11,中国的互联网技术要发展到今天的水平,或许要再多花20年。 从双11诞生至今的11年里,有一个场景始终在支付宝技术团队之中循环往复——…

大数据 Spark :利用电影观看记录数据,进行电影推荐 | 原力计划

作者 | lomtom责编 | 王晓曼出品 | CSDN博客准备1、任务描述在推荐领域有一个著名的开放测试集,下载链接是:http://grouplens.org/datasets/movielens/,该测试集包含三个文件,分别是ratings.dat、sers.dat、movies.dat&#xff0c…

大家都关注的Serverless,阿里怎么做的?

作者|陈仲寅(张挺) 出品|阿里巴巴新零售淘系技术部 本文是阿里巴巴前端技术专家-张挺,在 JSConf China 「中国开发者大会」上分享的《面向传统,Serverless 进化之路》,主要讲述阿里集团内部逐步迁移到 Serverless 体系…

我的第一个Go程序

夫陶公清风千古,余又何人,敢称庶几 文章目录介绍技术网站入门程序介绍 💡官网介绍 Go 是一门开放源代码的编程语言,可轻松构建简单,可靠且高效的软件。 💡百度百科 Go(又称 Golang)…

2684亿!阿里CTO张建锋:不是任何一朵云都撑得住双11

“不是任何一朵云都能撑住这个流量。中国有两朵云,一朵是阿里云,一朵叫其他云。”11月11日晚,阿里巴巴集团CTO张建锋表示,“阿里云不一样,10年前我们从第一行代码写起,构建了中国唯一自研的云操作系统飞天。…