Oceanus: 基于Apache Flink的一站式实时计算平台

电脑杂谈  发布时间:2020-05-04 07:01:23  来源:网络整理

运维体系建设方案_云计算运维_运维体系 实时计算平台

Flink Forward已获得Apache的正式授权,可以介绍Flink社区的最新发展,开发计划以及与Flink相关的生产实践经验. 2018年12月20日,Flink Forward首次来到中国. 腾讯的TEG数据平台部门参加了会议运维体系 实时计算平台,并介绍了Oceanus,这是由腾讯基于Flink构建的一站式实时计算平台.

I. 背景介绍

作为腾讯内部最大的实时数据服务部门,TEG实时计算团队为业务部门提供了高效,稳定且易于使用的实时数据服务. 每秒访问数据的峰值达到2.1亿,每天访问的数据量达到17万亿,每天数据增长量达到3PB,每天所需的实时计算量达到20万亿次.

近年来,大数据技术的发展,特别是HDFS和HBase等大数据存储系统以及Hadoop和Spark等大数据计算系统,使人们能够应对数据规模问题. 但是人们对数据内在价值的追求是无止境的. 一方面,人们开发了越来越复杂的数据挖掘算法,以发现更深层次的数据关系信息. 另一方面,由于数据的价值往往随着时间的流逝而消失,人们也要求数据分析的及时性越来越高. 越来越多的企业开始使用实时计算来获取及时的数据反馈.

实时计算团队基于Apache Storm构建了一个早期的实时计算平台. 但是,在长期维护过程中,Apache Storm的一些设计和实现缺陷已逐渐暴露出来. Apache Flink出现后,它在计算接口,计算性能和可靠性方面的出色性能使我们决定将Apache Flink用作新一代实时计算平台的计算引擎.

与Storm和其他流计算框架相比,Flink具有更高级的计算框架,具有以下优点:

1)首先,Flink提供了更友好的编程界面. Storm提供的API是低级且过于简单. 用户需要大量开发工作才能完成业务需求. 此外,用户在开发Storm程序时学习成本更高,并且需要熟悉分布式环境中的框架原理和执行细节. Flink除了提供诸如Table API和SQL之类的高级声明式编程语言外,还封装了诸如窗口之类的流计算中的常见运算符,以帮助用户处理流中数据乱序到达等问题计算. 流计算应用程序的开发成本,并减少不必要的开发重复.

2)Flink提供有效的状态管理支持. 大多数计算程序都是有状态的,也就是说,计算结果不仅由输入决定,而且还取决于计算程序的当前状态. 但是Storm对程序状态的支持非常有限. 通常,用户经常需要将状态数据保存在外部存储(例如MySQL和HBase)中,并负责访问这些状态数据. 这些对外部存储的访问通常成为Storm程序的性能瓶颈. 在大多数情况下,用户只能设计复杂的本地缓存以提高性能. Spark Streaming直到最近才提供有限的状态管理支持,但是其实现机制需要一定的远程访问和数据迁移工作,因此状态数据的访问效率不高. Flink为计算程序的状态存储提供了有效的支持. 用户可以通过提供的界面方便地存储和访问程序状态. 由于这些状态数据存储在本地,因此用户可以获得更高的访问性能. 发生故障时,Flink的状态管理将与容错机制配合使用以重建状态数据,以确保用户程序的正确性. 当用户需要修改程序并发时,Flink还可以自动将状态数据分发到新的计算节点.

运维体系建设方案_云计算运维_运维体系 实时计算平台

3)Flink提供了丰富的容错语义. 由于Storm缺乏对程序状态的有效支持,因此其对容错能力的支持也很弱. 很难确保在发生故障的情况下,每个输入数据仅被处理一次. Flink依靠分布式系统中经典的Chandy-Lamport算法来生成用户程序输入和状态的一致程序快照. Flink可以通过在异常情况下回滚快照来保证EXACTLY-ONCE的容错语义. 使用异步检查点和增量检查点技术,Flink可以以较低的成本拍摄用户程序的快照. 打开快照后,用户程序的性能几乎不会受到影响.

4)Flink具有出色的执行性能. Flink根据事件触发的执行模式处理数据流. 与Spark Streaming的迷你批处理执行模式相比,它可以大大减少程序执行期间的调度开销. 此外,Flink还对网络层进行了很多优化,通过细粒度的阻塞和有效的内存访问提高了数据传输性能,并通过反压机制和流量控制有效地减少了由于流量拥堵而导致的性能下降. 结合Flink避免远程访问状态数据的能力,Flink在实践中显示出比其他流计算系统更好的执行性能,并具有更低的处理延迟和更高的吞吐量.

第二,平台介绍

尽管Flink作为计算引擎具有相对较好的性能,但在业务迁移过程中我们仍然遇到一些问题. 从开发到启动,流计算任务经历了多个阶段,包括开发,测试,部署,操作和维护. 用户首先在开发阶段使用IDE来开发程序,然后对其进行编译和打包. 之后,用户将打包的程序部署到测试环境,并生成用于测试的测试数据. 测试通过后,用户需要将其部署到现有的网络环境,并设置所需的运行和维护指标以进行监控. 在这些阶段中,用户需要应对不同的环境和不同的工具,总体开发,运维效率较低.

为了提高持续集成和持续发布用户流计算任务的效率,实时计算团队围绕Flink建立了Oceanus,Flink是一站式可视实时计算平台,集成了开发,测试运维体系 实时计算平台,部署,以及操作和维护. Oceanus集成了应用程序管理,计算引擎和资源管理等功能,并同时通过日志,监视,操作和维护以及其他服务来打开应用程序的整个生命周期.

目前,Oceanus已涵盖所有业务BG,为多个业务提供实时计算服务. 实时计算团队还将负责数据访问,处理和管理的腾讯内部TDBank运营从JStorm迁移到了Oceanus平台. 此外,最初基于Storm上的SQL的EasyCount平台上的大多数服务也已迁移到Oceanus.

2.1多样化的应用程序构建方法

Oceanus提供多种形式的应用程序构建,以满足不同用户的需求. 一般用户可以使用画布轻松地构建他们的实时计算应用程序. Oceanus在网页上提供了常见的流量计算运算符. 用户可以将运算符拖放到画布上,并连接这些运算符以构建流量计算应用程序. 这种构造方法非常简单,不需要用户了解底层实现的细节,也不需要掌握SQL和其他语言的语法,因此用户可以专注于业务逻辑和数据流.

运维体系建设方案_运维体系 实时计算平台_云计算运维

对于具有一定数据分析背景的用户,Oceanus提供了Flink SQL界面. Flink SQL尽可能遵循SQL标准来描述流数据的计算语义,因此曾经使用数据仓库进行脱机数据分析的用户可以快速迁移到Flink SQL并使用Flink SQL分析实时数据流. 为了进一步降低用户开发成本,Oceanus在平台上还提供了许多常见的SQL函数. 为了创建方便,流畅的用户体验,Oceanus还提供了一系列辅助功能来开发Flink SQL:

1)语法突出显示并自动完成

2)表名和字段名的快速输入和模糊匹配

3)常用功能的模糊匹配

4)一键式验证码有效性

5)一键式代码格式化

......

考虑到它是canvas还是SQL,它们的表达能力相对有限,因此难以开发具有复杂逻辑的某些应用程序,并且无法优化一些底层细节. Oceanus允许用户继续使用Flink接口提供的DataStream来开发实时计算程序. 这样,用户只需打包其实时计算程序并将其上传到Oceanus.

2.2外部数据管理

运维体系建设方案_运维体系 实时计算平台_云计算运维

为了方便用户管理Flink作业的读写,Oceanus提供了管理外部数据的功能. 在开发应用程序之前,用户可以通过Oceanus声明应用程序所需的数据源名称,存储类型(例如Hippo,Tube,MySQL,HBase等),以及每个数据字段的名称和类型. 外部数据管理使用户能够完成Oceanus上外部数据的创建和访问,并在开发程序时提供必要的字段和格式信息,从而提高了用户开发实时计算应用程序的效率. 此外,外部数据管理还可以使用户更好地维护外部数据的血缘关系和生产逻辑,并在数据异常时根据生产链接跟踪和定位问题.

2.2实时可视化计算结果

对于正在运行的应用程序,Oceanus提供了实时查看计算结果的功能. Oceanus当前提供两种不同的实时可视化方法. 首先,用户可以通过Oceanus提供的结果采样功能获得当前计算结果的实时采样,并使用比较结果来验证实时计算应用程序的正确性. 此外,Oceanus还开设了一个的报告平台-Pony Report(). 用户可以将计算结果连接到小马报告,以构建业务仪表板并实时可视化业务数据.

2.3自助调试,快速验证业务逻辑

在完成实时计算应用程序的开发中,Oceanus为用户程序提供了一系列工具来验证应用程序逻辑. 用户可以使用Oceanus提供的一键生成功能生成测试数据,也可以将自己的测试数据上传到Oceanus,并通过比较预期结果和实际结果来验证应用程序逻辑的正确性. 在后续工作中,Oceanus还将提供从实时网络数据采样中生成测试数据的功能. 这样,用户可以通过更真实的测试数据更好地发现应用程序逻辑问题.

2.4快速便捷的资源管理和作业部署

云计算运维_运维体系 实时计算平台_运维体系建设方案

完成任务开发和测试后,用户可以通过Oceanus快速部署在群集上. Oceanus依靠腾讯的内部资源调度系统Gaia进行资源管理和作业部署. Oceanus在作业管理页面上提供了作业资源配置页面. 用户可以使用此配置页面来配置作业所需的CPU和内存资源,并指定需要将作业部署到的群集. 用户完成配置后,Oceanus将向Gaia申请相应资源,并将作业提交给Gaia以运行. 基于Flink提供的检查点功能,Oceanus允许用户实时修改作业并发以实现动态扩展和收缩.

2.5丰富的运维监控指标

Oceanus在Flink作业运行时收集多个操作指示器,包括任务管理器内存,I / O和GC. 这些收集的指示符将写入消息队列Tube中,并使用时间序列OpenTSDB进行汇总. 通过这些丰富的操作指标,用户可以很好地了解应用程序的运行状态,并可以在出现异常时帮助用户及时定位问题. 运维人员可以利用这些收集的指标来制定警报策略并实现精细化的操作.

三,功能改进

为了提供更好的实时计算服务,实时计算团队还对Flink内核进行了很多改进,以提高其可用性和可靠性.

为了方便用户开发画布和SQL程序,实时计算团队已实现了30多个Table API和SQL函数. 用户可以使用这些内置功能来大大提高实时计算应用程序的开发效率. 此外,实时计算团队还优化了许多数据流和外部维表. 它还为AsyncIO操作员提供超时处理. 实时计算团队还实现了增强的窗口,可以更好地处理延迟到达的数据,从而避免这些延迟数据的丢失对计算结果的准确性的影响.

实时计算团队还对Flink的稳定性做了很多工作. 例如,通过改进Job Master的容错机制,实时计算团队可以认识到Master不会在发生故障时影响作业的正常执行.

在继续改进Flink的同时,实时计算团队还与Flink社区建立了紧密合作,这些改进已反馈给Flink,为Flink的发展做出了许多贡献. 目前,实时计算团队已经拥有一名提交者和三名活跃贡献者. 在刚刚发布的Flink 1.7版本中,实时计算团队成员贡献了30多个拉取请求.

在接下来的工作中,Oceanus将继续致力于实时计算的可用性和稳定性,以为用户提供更好的实时计算服务. 我们将继续完善运维监控指标,使监控系统更加智能化,方便用户监控运行情况和定位异常情况. 同时,我们还将优化现有的弹性伸缩机制,以便用户可以根据业务负载快速扩展和收缩. 最后,我们将改进Flink的现有状态管理系统,以减少Flink因负载倾斜而导致的性能下降.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-198348-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...