Flink on PaaSTA:Yelp运行在Kubernetes上的新流处理平台

2020 年 11 月 05 日

Flink on PaaSTA:Yelp运行在Kubernetes上的新流处理平台

本文最初发布于 yelp 工程博客,由 InfoQ 中文站翻译并分享。


在 Yelp,我们每天使用Apache Flink处理 TB 级的流数据,为各种各样的应用提供支持:ETL 管道、推送通知、机器人过滤、Session 化等等。我们运行成百上千的 Flink 作业,因此,如果没有适当程度的自动化,像部署、重启和保存点这样的常规操作会花费开发人员数千小时的时间。最近,我们的工具室中增加了一个新的流处理平台,它基于 Yelp 的 PaaS 服务PaaSTA。其核心是一个KubernetesOperator,它自动监视我们的 Flink 集群的 fleet 部署和生命周期。



Flink on PaaSTA on Kubernetes


引入 Kubernetes 之前


在 Yelp 引入 Kubernetes 之前,Yelp 的 Flink 工作负载运行在专用的 AWSElasticMapReduce集群上,这些集群预装了 Flink 和YARN。为了实现 EMR 实例与 Yelp 生态系统其余部分的良好协同,我们之前的流处理平台 Cascade 在一个Docker容器中运行大量的Puppet单体,以应用配置并启动一组常见的守护进程(在 Yelp 几乎所有的主机上运行)。



Cascade 的架构


Cascade 还针对每个集群引入了一个控制器组件,负责 Flink 作业生命周期(启动、停止、设置保存点)和监控,我们称之为 Flink Supervisor。


虽然这个系统为我们服务了很多年,但我们的开发人员受到了不少限制:


  • 之前需要大约30分钟才能启动一个新的Flink集群;

  • 我们需要训练有素的操作人员手动部署新版本或扩大每个集群的资源;

  • 我们无法升级到更新版本的Flink,除非AWS支持这些版本;

  • 在Docker中运行Puppet以及维护一个与Yelp其他部分完全不同的基础设施,复杂而耗时。


当 Kubernetes 在公司内外的发展势头越来越猛时,我们确信,是时候做出改变了。


Flink 恋上 PaaSTA


PaaSTA是 Yelp 的平台即服务,运行 Yelp 的所有 Web 服务和其他一些无状态的工作负载,比如批处理作业。它最初是在Apache Mesos上开发的,现在我们正在将其迁移到 Kubernetes。得益于 Kubernetes 的强大功能,这为我们支持更复杂的工作负载提供了机会。Flink 是第一个,Cassandra支持也很快就会到来(请关注新博文!),对于这两者,相关开发工作都是在与计算基础设施团队的紧密合作下开展的。


为了在 Kubernetes 上运行 Flink,我们没有使用现成的东西,而是开发了一个完善的平台,使运行 Flink 工作负载的体验尽可能类似于运行 Yelp 的任何其他服务。我们这样做是为了极大地减少用户操作 Flink 集群所需的知识,并使我们的基础设施与 Yelp 生态系统的其他部分保持同构。


借助 Flink on PaaSTA,配置集群就像编写一个 YAML 配置文件一样简单。只要通过Jenkins提交给 Git,新的代码就会自动进行部署。PaaSTA 提供的启动、停止、日志读取或 Web 服务监视命令对于任何 Flink 集群都完全相同。



paasta status 命令的输出


除了用户体验方面的改进,我们还成功地将 Flink 集群的平均启动时间从 30 分钟减少到 2 分钟以内,而且,我们现在可以按照自己的时间表自由地跳转到 Flink 的最新版本。


内部原理


Flink on PaaSTA 的核心是我们自定义的 KubernetesOperator,它监视在 Kubernetes 上运行的 Flink 集群的状态,并确保它们始终与用户定义的配置相匹配。


我们的 PaaSTA 将该配置转换为 Kubernetes自定义资源,Operator 读取这些资源并使用从 Flink 集群获取的信息(如作业列表和状态)更新它们。PaaSTA 命令也使用这些资源来获取要向用户显示的内容,并与 Operator 进行交互,以完成启动、停止等操作。


Operator 知道如何将 Flink 集群资源的高级定义映射到正确的 Kubernetes 原语中,比如Deployment调度TaskManagersService让集群中的其他组件可以发现JobManager,或Ingress让用户可以访问 Flink Web 仪表板。Operator 和 Jenkins 将这些组件安排在 Docker 容器中,这让我们可以自定义 Flink 安装,并为每个应用程序选择合适的 Flink 版本。


在下图中,你可能会惊讶地发现,我们的遗留组件 Supervisor 在我们的新平台中仍然占有一席之地。在 Yelp,我们在处理我们的所有项目时都秉承实用的精神,包括基础设施迁移。虽然 Supervisor 所做的一切都可以由 Operator 完成,但我们决定保留它,通过重用现有功能来减少开发时间。更重要的是,最小化更改范围还有助于尽可能简化现有用户从 Cascade 到 PaaSTA 的迁移。


例如,我们将 Supervisor 部署为一个 Kubernetes作业,以便在 Operator 关闭集群之前利用它的逻辑触发集群上运行的所有 Flink 作业的保存点



一个 Flink PaaSTA 集群的组件


如果你想了解更多细节,建议你观看我们在Flink Forward上的演讲


现在情况如何?


Flink on PaaSTA 将我们从数百个 Flink 集群的管理中解放出来,为我们的用户和流处理团队打开了一个充满可能性的新世界。


在基础设施方面,为了使 Python 流处理成为 Yelp 的一等公民,我们现在已基本完成在 Flink onPaaSTA 上添加Apache Beam支持。此外,我们还在为 Flink 集群实现自动伸缩和针对每个作业的成本报告。


在用户体验方面,我们正在开发工具,以便让我们的用户可以使用单个配置文件定义流组件的复杂管道。此外,我们也正在忙着构建功能来塑造我们的在线机器学习平台。


如果你想了解以上内容,请继续关注!


查看英文原文:

Flink on PaaSTA: Yelp’s new stream processing platform runs on Kubernetes


2020 年 11 月 05 日 18:39976

评论

发布
暂无评论
发现更多内容

史上最全的开源项目创作指南

开源 经验分享

面试被问线程安全怎么保障,我的回答让面试官眼前一亮

996小迁

Java 学习 架构 面试 笔记

Java对IPv6的支持详解:支持情况、相关API、演示代码等

JackJiang

Java 网络编程 ipv6 ipv4

一文搞懂RESTful API

bigsai

RESTful Rest

史上最实用的Android切片应用库XAOP使用指南

android aop 开源项目 框架

技术博客,从零到数万访问,这两年我都做了什么

android 博客 经验分享

京东T8Java架构师总结整理的《15w字的Java面试手册》,涵盖了大厂所有主流技术面试题及答案!

Java成神之路

Java 程序员 架构 面试 编程语言

roblox 杂记

katichar

字节总监首发1121道LeetCode算法刷题笔记(含答案)

Crud的程序员

程序员 面试 算法 字节 面试刷题

二本毕业、两年Javacrud经验,面试阿里侥幸通过成功拿到P6级offer,分享面经!

Java成神之路

Java 程序员 架构 面试 编程语言

深入理解Git的实现原理

程序员小灰

c++ git Linux 项目管理 架构师

网络入门模拟器:Cisco Packet Tracer

网络技术平台

架构词典:SLA

lidaobing

架构 SLA

架构师训练营第 12 周总结

邓昀垚

Gemini双子新约软件系统开发|Gemini双子新约APP开发

开發I852946OIIO

系统开发

腾讯云区块链总经理李力:产业区块链的四大发展趋势

CECBC区块链专委会

区块链 大数据

话题讨论 | 那些年奇葩的面试经历

三号无名指

话题讨论

移动端技术方案设计的经验总结

张明云

android 架构 移动应用 架构师 技术方案

详解TCP IP网络协议栈底层原理到徒手实现

赖猫

c++ Linux 编程 程序 网络协议栈

如何在高速发展中等一等老人 银行数字化服务显温度

CECBC区块链专委会

银行 养老服务

我是因为这个才选择当程序员的,那么你呢?

Java架构师迁哥

Flutter Plugin插件开发填坑指南

flutter 经验分享

史上最好用的Android全量版本更新库XUpdate使用指南

android UI 框架开发 xupdate

default-servlet-handler不生效原因,springmvc静态资源拦截方案比较

叫练

springmvc 静态资源拦截 default-servlet-handler 资源配置不生效

架构师训练营第12周作业

邓昀垚

为什么说区块链完全去中心化做不到且没有意义

CECBC区块链专委会

区块链 去中心化

从构建小系统到架构分布式大系统,Spring Boot2的精髓全在这里了

Java成神之路

Java 程序员 架构 面试 编程语言

我把Github上最牛b的Java教程和实战项目整合成了一个PDF文档

Java成神之路

Java 程序员 架构 面试 编程语言

史上最优美的Android原生UI框架XUI使用指南

android UI 框架开发

开源软件联盟PostgreSQL分会投稿指南

PostgreSQLChina

数据库 postgresql 软件 投稿

天啊!怎么会有人把Spring Cloud微服务架构讲得这么透彻?

Java成神之路

Java 程序员 架构 面试 编程语言

Flink on PaaSTA:Yelp运行在Kubernetes上的新流处理平台-InfoQ