首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/T47JE170VyVtywl19Z1H
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券