- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
腾讯基于 Flink 构建实时流计算平台的实践
杨华 | 腾讯大数据高级工程师
摘要:深入探索 Flink 计算框架在腾讯的实践与现状、围绕 Flink 打造的一体化实时计算平台 Oceanus、Flink 的改进与优化、Flink 与 Pulsar 的协作等。
展开查看详情
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 !