大家好,我是炫。欢迎来到我的 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 支持的众多应用场景。
实时数据计算
如果你对大数据技术有所接触,那么下面的这些需求场景你应该并不陌生:
- 阿里巴巴每年双十一都会直播,实时监控大屏是如何做到的?
- 公司想看一下大促中销量最好的商品 TOP5?
- 我是公司的运维,希望能实时接收到服务器的负载情况。
- 电商平台需要即时推送用户个性化的商品推荐信息。
- 游戏开发公司希望实时监测玩家行为,提供个性化游戏体验。
我们可以看到,数据计算场景需要从原始数据中提取有价值的信息和指标,比如上面提到的实时销售额、销量的 TOP5,以及服务器的负载情况等。
传统的分析方式通常是利用批查询,或将事件(生产上一般是消息)记录下来并基于此形成有限数据集(表)构建应用来完成。为了得到最新数据的计算结果,必须先将它们写入表中并重新执行 SQL 查询,然后将结果写入存储系统比如 MySQL 中,再生成报告。
Apache Flink 同时支持流式及批量分析应用,这就是我们所说的批流一体。Flink 在上述的需求场景中承担了数据的实时采集、实时计算和下游发送。
实时数据仓库和 ETL
ETL(Extract-Transform-Load)的目的是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程。
传统的ETL -离线数据仓库 ETL
传统的离线数据仓库将业务数据集中进行存储后,以固定的计算逻辑定时进行 ETL 和其他建模后产出报表等应用。离线数据仓库主要是构建 T+1 的离线数据,通过定时任务每天拉取增量数据,然后创建各个业务相关的主题维度数据,对外提供 T+1 的数据查询接口。
实时数据仓库
实时数据仓库和传统的离线数仓的差异,可以看到离线数据仓库的计算和数据的实时性均较差。数据本身的价值随着时间的流逝会逐步减弱,因此数据发生后必须尽快的达到用户的手中,实时数仓的构建需求也应运而生。
实时数据仓库的建设是“数据智能 BI”必不可少的一环,也是大规模数据应用中必然面临的挑战。
Flink 在实时数仓和实时 ETL 中有天然的优势:
- 状态管理, 实时数仓里面会进行很多的聚合计算,这些都需要对于状态进行访问和管理,Flink 支持强大的状态管理;
- 丰富的 API, Flink 提供极为丰富的多层次 API,包括 Stream API、Table API 及 Flink SQL;
- 生态完善,实时数仓的用途广泛,Flink 支持多种存储(HDFS、ES 等);
- 批流一体, Flink 已经在将流计算和批计算的 API 进行统一。
事件驱动型应用
你是否有这样的需求:
- 我们公司有几万台服务器,希望能从服务器上报的消息中将 CPU、MEM、LOAD 信息分离出来做分析,然后触发自定义的规则进行报警?
- 我是公司的安全运维人员,希望能从每天的访问日志中识别爬虫程序,并且进行 IP 限制?
- 电商平台希望实时监控用户行为,通过分析点击、浏览、购买等事件实时调整商品推荐策略?
- 航空公司想要在飞机起飞前,通过监测飞机各个系统的传感器数据,确保飞机在最佳状态下起飞。
- 智能家居系统希望根据用户的行为事件,自动调整温度、照明等设备,提供更智能化的居家体验。
- 在物联网设备中,追踪和分析设备的状态变化,例如工厂中的机器运行状态、温度传感器数据。
- 社交媒体平台根据用户发布的内容和行为,实时更新用户的推荐关注列表。
- 在在线游戏中,根据玩家的行为和决策实时调整游戏中的难度和道具掉落。
- 金融机构通过监测市场行情、交易数据,实时进行风险管理和交易决策。
- 医疗健康领域,监测患者生理数据,及时触发警报并通知医护人员。
- 物流公司根据实时的交通、天气等信息,优化路线规划和配送计划。
- 能源行业监测电力设备的运行状态,预测潜在故障并进行及时维护。
- 在智慧城市中,实时监控交通流量,优化红绿灯控制以缓解拥堵。
- 云计算平台根据用户请求和负载实时调整资源分配,保证服务稳定性和性能。
- 教育科技公司分析学生的学习行为,个性化推荐学习内容和方式。
事件驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作。
在传统架构中,我们需要读写远程事务型数据库,比如 MySQL。在事件驱动应用中数据和计算不会分离,应用只需访问本地(内存或磁盘)即可获取数据,所以具有更高的吞吐和更低的延迟。
下图为传统的事务架构
事件驱动型应用是一类具有状态的应用,
它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作。
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 解决的一些关键问题和应用场景:
-
实时数据同步: Flink CDC 可以监控数据库中的变化,并将变化的数据实时同步到其他数据存储或数据仓库中。这对于需要保持多个数据源一致性的应用非常重要,比如在不同的微服务之间保持数据同步。
-
数据仓库更新: 在数据仓库中,数据经常需要进行实时更新,以确保分析和报告的准确性。使用 Flink CDC,可以捕获数据库变化并将这些变化应用到数据仓库中,从而保持数据的最新状态。
-
缓存维护: 对于需要维护实时数据缓存的应用,Flink CDC 可以帮助捕获数据库中的变化,并将这些变化应用到缓存系统中,以确保缓存数据的及时更新。
-
实时计算场景: 在需要进行实时计算的场景中,Flink CDC 可以作为输入流,捕获数据库中的变化并将其传递给 Flink 作业进行实时计算。这对于需要基于实时数据做出决策或生成实时报告的业务非常有用。
-
事务性数据变更: Flink CDC 不仅可以捕获数据的插入和更新,还能够捕获事务性的数据变更,确保在进行数据同步时维持事务的一致性。
总体而言,Flink CDC 提供了一个强大的工具,使得开发人员能够轻松地解决涉及实时数据变更的各种疑难场景,确保数据的一致性和准确性。这对于构建实时数据处理和分析系统非常有帮助。