3. 腾讯基于 Flink 构建实时流计算平台的实践-杨华

展开查看详情

1.腾讯基于 Flink 构建实时流计算平台的实 践 杨 华 华 (vinoyang) 2019.06.29vinoyang) 2019.06.29) 2019.06.29

2. About ● 腾讯大数据高级工程师 ● Flink active contributor ● Kylin Flink cube eng) 2019.06.29ine 作者 ● Edg) 2019.06.29eXFoundry commiter

3. Contents ● Flink 简介 ● Flink 在腾讯实时计算概况简介 ● 针对 Flink 的扩展与优化 ● Plusar 与 Flink 的整合

4.Flink 简 介 • Apache Flink 是一个开源的流处理框架,适用于分布式、高性能、高可用以及有正确性要求的 数据流应用。 • 2014/3 加入 ASF 孵化器孵化, 2014/12 成为的顶级项目 • 项目前身 : Stratosphere(vinoyang) 2019.06.29 德国柏林理工大学, 2008)) • 背后的公司 : data Artisans(vinoyang) 2019.06.29 被阿里收购后更名为 ververica) • 开发语言: Java & Scala • 主要的设计理念: Streaming) 2019.06.29 first & Batch on streaming) 2019.06.29

5.Flink 组件 栈

6.Flink future stack

7.Flink 系统交互 图

8.Flink 在腾讯的演进历 程 2017 年上 Flink 框架预研,跟 Storm 进行对 比 2017 年下 Flink 内部版本定制开发, Storm 业务迁 移, Standalone 集群模式运行 2018 年上 Flink 产品化,打造一体化的实时流 计算平台 Oceanus,Flink on Yarn 2018 年下 实时流计算平台规模化接入腾讯 2019 年上 内部业务 (vinoyang) 2019.06.29 覆盖所有 BG)) 与外部 完善场景化服务,上线在线 客户并上线公有云 ML ,同时发力 Flink 批处理,打 造 SuperSQL

9.Flink 赋能腾讯实时计 算

10.Flink 在腾讯实时计算的规 模 34 万 2.1 亿 /ss 近 20 万亿 集群总核数 峰值算力 日均消息量 目前,腾讯内部除广告的在线训练业务外,原先运行在 Storm 上的实时流计算业务都已逐步迁移至 Flink 平台,广告业务的迁移计划预期也在今年下半年完成。

11.Oceanus 平台整体技术架 构

12.Flink Web UI 重构

13.Flink Web UI 重构

14.Flink Web UI 重构

15.JobManager Failover 优化 ZooKeeper 2. Notify Leadership Chang) 2019.06.29ed 1. G)rant Leadership JobManag) 2019.06.29er JobManag) 2019.06.29er 4. Recheck running) 2019.06.29 state 3. Report Task State 3. Report Task State TaskManag) 2019.06.29er TaskManag) 2019.06.29er TaskManag) 2019.06.29er Task Task Task Task Task Task Task Task Task

16.Increment Window Event e e e e e e e e …….. e e e e 5min 5min …….. 5min R(n) = R(n-1) + delta R(n+1) = R(n) + delta R(n+m) = R(n+m-1) + delta Sink R(n) Sink R(n+1) Sink R(n+m) 24h Purge R(n+m)

17. Increment Window 一天中游戏用户钻石消耗小时粒度的增长趋势        SELECT userId, SUM(vinoyang) 2019.06.29units), SQL 用法: INCREMENT_TIME(vinoyang) 2019.06.29true) FROM Consumes G)ROUP BY INCREMENT(vinoyang) 2019.06.29consumeTime, INTERVAL '1' DAY, INTERVAL '1' hour), userId val input = env.addSource(vinoyang) 2019.06.29new SourceFunction[Tuple2[String) 2019.06.29,Long) 2019.06.29]](vinoyang) 2019.06.29){......}) .assig) 2019.06.29nTimestampsAndWatermarks(vinoyang) 2019.06.29new Assig) 2019.06.29nerWithPeriodicWatermarks[(vinoyang) 2019.06.29String) 2019.06.29, Long) 2019.06.29)] {......}) .toTable(vinoyang) 2019.06.29tEnv, 'a, 'b, 'c.rowtime) Table API 用法: val windowedTable = input.window(vinoyang) 2019.06.29Increment over 1.day every 1.hour on 'c as 'w) .g) 2019.06.29roupBy(vinoyang) 2019.06.29'w, 'a) .select(vinoyang) 2019.06.29'b.sum, 'a.count, incrementTime(vinoyang) 2019.06.29true))

18.FLIP-44:Support local aggregation in Flink 4 5 4 5 5 5 Source -> KeyBy -> Count-> Sink 3 1 4 3 2 2 2 3 5 4 5 5 1 3 3 3 2 5 Source -> LocalKeyBy -> Window -> Count -> KeyBy -> Sum -> Sink

19.FLIP-44:LocalKeyBy 使用 示例

20.Apache Pulsar + Apache Flink • Flink + Pulsar • Streaming) 2019.06.29 Connectors • Source Connectors • PulsarCatalog) 2019.06.29: Schema Integ) 2019.06.29ration • PulsarStateBackend • Pulsar for the unified view of Data, Flink for the unified view of Computing) 2019.06.29

21.Flink Pulsar streaming connector(Streaming source- >Streaming sink)

22.Flink Pulsar streaming connector(Streaming source- >Streaming Table sink)

23.Flink Pulsar batch sink

24. Roadmap: Batch source • Read Seg) 2019.06.29ments in Parallel • Bypass Brokers • Access tiered storag) 2019.06.29e directly • Scan Trimmer • Select Seg) 2019.06.29ments by Publish Time

25. Roadmap: Schema Integration • Pulsar has builtin schema reg) 2019.06.29istry • Primitive types, Avro, Json, Protobuf, … • Schema Evolution & Multi-versioning) 2019.06.29 schemas • PulsarCatalog) 2019.06.29

26. Roadmap: BookKeeperStateBackend • BookKeeperStateBackend • Save State as Seg) 2019.06.29ments to BookKeeper

27.Thanks !