01-Flink 的架构模型和应用场景

37 阅读10分钟

大家好,我是炫。欢迎来到我的 Flink 专栏,一个专注于助你深入学习 Flink 技术的地方。

Flink 的架构模型和应用场景

实时计算最好的时代

在过去的十年里,面向数据时代的实时计算技术接踵而至。从我们最初认识的 Storm,再到 Spark 的异军突起,迅速占领了整个实时计算领域。直到 2019 年 1 月底,阿里巴巴内部版本 Flink 正式开源!一石激起千层浪,Flink 开源的消息立刻刷爆朋友圈,整个大数据计算领域一直以来由 Spark 独领风骚,瞬间成为两强争霸的时代。

Apache Flink(以下简称 Flink)以其先进的设计理念、强大的计算能力备受关注,如何将 Flink 快速应用在生产环境中,更好的与现有的大数据生态技术完美结合,充分挖掘数据的潜力,成为了众多开发者面临的难题。

Flink 实际应用场景

Flink 自从 2019 年初开源以来,迅速成为大数据实时计算领域炙手可热的技术框架。作为 Flink 的主要贡献者阿里巴巴率先将其在全集团进行推广使用,另外由于 Flink 天然的流式特性,更为领先的架构设计,使得 Flink 一出现便在各大公司掀起了应用的热潮。

阿里巴巴、腾讯、百度、字节跳动、滴滴、华为等众多互联网公司已经将 Flink 作为未来技术重要的发力点,迫切地在各自公司内部进行技术升级和推广使用。同时,Flink 已经成为 Apache 基金会和 GitHub 社区最为活跃的项目之一

我们来看看 Flink 支持的众多应用场景。

实时数据计算

如果你对大数据技术有所接触,那么下面的这些需求场景你应该并不陌生:

  1. 阿里巴巴每年双十一都会直播,实时监控大屏是如何做到的?
  2. 公司想看一下大促中销量最好的商品 TOP5?
  3. 我是公司的运维,希望能实时接收到服务器的负载情况。
  4. 电商平台需要即时推送用户个性化的商品推荐信息。
  5. 游戏开发公司希望实时监测玩家行为,提供个性化游戏体验。

我们可以看到,数据计算场景需要从原始数据中提取有价值的信息和指标,比如上面提到的实时销售额、销量的 TOP5,以及服务器的负载情况等。

传统的分析方式通常是利用批查询,或将事件(生产上一般是消息)记录下来并基于此形成有限数据集(表)构建应用来完成。为了得到最新数据的计算结果,必须先将它们写入表中并重新执行 SQL 查询,然后将结果写入存储系统比如 MySQL 中,再生成报告。

Apache Flink 同时支持流式及批量分析应用,这就是我们所说的批流一体。Flink 在上述的需求场景中承担了数据的实时采集实时计算下游发送

实时数据仓库和 ETL

ETL(Extract-Transform-Load)的目的是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程。

传统的ETL -离线数据仓库 ETL

image.png

传统的离线数据仓库将业务数据集中进行存储后,以固定的计算逻辑定时进行 ETL 和其他建模后产出报表等应用。离线数据仓库主要是构建 T+1 的离线数据,通过定时任务每天拉取增量数据,然后创建各个业务相关的主题维度数据,对外提供 T+1 的数据查询接口。

实时数据仓库

image.png

实时数据仓库和传统的离线数仓的差异,可以看到离线数据仓库的计算和数据的实时性均较差。数据本身的价值随着时间的流逝会逐步减弱,因此数据发生后必须尽快的达到用户的手中,实时数仓的构建需求也应运而生。

实时数据仓库的建设是“数据智能 BI”必不可少的一环,也是大规模数据应用中必然面临的挑战。

Flink 在实时数仓和实时 ETL 中有天然的优势:

  • 状态管理, 实时数仓里面会进行很多的聚合计算,这些都需要对于状态进行访问和管理,Flink 支持强大的状态管理;
  • 丰富的 API, Flink 提供极为丰富的多层次 API,包括 Stream API、Table API 及 Flink SQL;
  • 生态完善,实时数仓的用途广泛,Flink 支持多种存储(HDFS、ES 等);
  • 批流一体, Flink 已经在将流计算和批计算的 API 进行统一。

事件驱动型应用

你是否有这样的需求:

  1. 我们公司有几万台服务器,希望能从服务器上报的消息中将 CPU、MEM、LOAD 信息分离出来做分析,然后触发自定义的规则进行报警?
  2. 我是公司的安全运维人员,希望能从每天的访问日志中识别爬虫程序,并且进行 IP 限制?
  3. 电商平台希望实时监控用户行为,通过分析点击、浏览、购买等事件实时调整商品推荐策略?
  4. 航空公司想要在飞机起飞前,通过监测飞机各个系统的传感器数据,确保飞机在最佳状态下起飞。
  5. 智能家居系统希望根据用户的行为事件,自动调整温度、照明等设备,提供更智能化的居家体验。
  6. 在物联网设备中,追踪和分析设备的状态变化,例如工厂中的机器运行状态、温度传感器数据。
  7. 社交媒体平台根据用户发布的内容和行为,实时更新用户的推荐关注列表。
  8. 在在线游戏中,根据玩家的行为和决策实时调整游戏中的难度和道具掉落。
  9. 金融机构通过监测市场行情、交易数据,实时进行风险管理和交易决策。
  10. 医疗健康领域,监测患者生理数据,及时触发警报并通知医护人员。
  11. 物流公司根据实时的交通、天气等信息,优化路线规划和配送计划。
  12. 能源行业监测电力设备的运行状态,预测潜在故障并进行及时维护。
  13. 在智慧城市中,实时监控交通流量,优化红绿灯控制以缓解拥堵。
  14. 云计算平台根据用户请求和负载实时调整资源分配,保证服务稳定性和性能。
  15. 教育科技公司分析学生的学习行为,个性化推荐学习内容和方式。

事件驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作。

在传统架构中,我们需要读写远程事务型数据库,比如 MySQL。在事件驱动应用中数据和计算不会分离,应用只需访问本地(内存或磁盘)即可获取数据,所以具有更高的吞吐和更低的延迟。

下图为传统的事务架构

image.png

事件驱动型应用是一类具有状态的应用,

它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作。

image.png

Flink 的以下特性完美的支持了事件驱动型应用:

  • 高效的状态管理,Flink 自带的 State Backend 可以很好的存储中间状态信息;
  • 丰富的窗口支持,Flink 支持包含滚动窗口、滑动窗口及其他窗口;
  • 多种时间语义,Flink 支持 Event Time、Processing Time 和 Ingestion Time;
  • 不同级别的容错,Flink 支持 At Least Once 或 Exactly Once 容错级别。

小结

Apache Flink 从底层支持了针对多种不同场景的应用开发。

Flink 的主要特性包括:批流一体、Exactly-Once、强大的状态管理等。同时,Flink 还支持运行在包括 YARN、 Mesos、Kubernetes 在内的多种资源管理框架上。阿里巴巴已经率先将 Flink 在全集团进行推广使用,事实证明,Flink 已经可以扩展到数千核心,其状态可以达到 TB 级别,且仍能保持高吞吐低延迟的特性。

因此,Flink 已经成为我们在实时计算的领域的第一选择

flink cdc解决了好多疑难场景

Apache Flink 的 CDC(Change Data Capture)功能在解决实际场景中的疑难问题方面发挥了重要作用。CDC 是一种用于捕获数据库中变化的技术,通常用于实时数据同步、数据仓库更新、缓存维护等场景。以下是 Flink CDC 解决的一些关键问题和应用场景:

是的,Apache Flink 的 CDC(Change Data Capture)功能在解决实际场景中的疑难问题方面发挥了重要作用。CDC 是一种用于捕获数据库中变化的技术,通常用于实时数据同步、数据仓库更新、缓存维护等场景。以下是 Flink CDC 解决的一些关键问题和应用场景:

  1. 实时数据同步: Flink CDC 可以监控数据库中的变化,并将变化的数据实时同步到其他数据存储或数据仓库中。这对于需要保持多个数据源一致性的应用非常重要,比如在不同的微服务之间保持数据同步。

  2. 数据仓库更新: 在数据仓库中,数据经常需要进行实时更新,以确保分析和报告的准确性。使用 Flink CDC,可以捕获数据库变化并将这些变化应用到数据仓库中,从而保持数据的最新状态。

  3. 缓存维护: 对于需要维护实时数据缓存的应用,Flink CDC 可以帮助捕获数据库中的变化,并将这些变化应用到缓存系统中,以确保缓存数据的及时更新。

  4. 实时计算场景: 在需要进行实时计算的场景中,Flink CDC 可以作为输入流,捕获数据库中的变化并将其传递给 Flink 作业进行实时计算。这对于需要基于实时数据做出决策或生成实时报告的业务非常有用。

  5. 事务性数据变更: Flink CDC 不仅可以捕获数据的插入和更新,还能够捕获事务性的数据变更,确保在进行数据同步时维持事务的一致性。

总体而言,Flink CDC 提供了一个强大的工具,使得开发人员能够轻松地解决涉及实时数据变更的各种疑难场景,确保数据的一致性和准确性。这对于构建实时数据处理和分析系统非常有帮助。