说到实时计算,首先我们需要了解其概念。
实时计算 是一种持续、低时延、事件触发的计算作业
实时计算有如下三种特点:
说到实时计算的实现,有很多种技术手段,目前主流的技术实现是Flink,博主曾经开过Flink
的专栏,有兴趣的同学可以了解下《Flink专栏》。
Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算,Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
Apache Flink 擅长处理无界和有界数据集 精确的时间控制和状态化使得 Flink 的运行时(runtime)能够运行任何处理无界流的应用,有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理,产生了出色的性能。
有状态的 Flink 程序针对本地状态访问进行了优化。任务的状态始终保留在内存中,如果状态大小超过可用内存,则会保存在能高效访问的磁盘数据结构中。
Flink通过几下多种机制维护应用可持续运行及其一致性:
Flink
的故障恢复机制是通过建立分布式应用服务状态一致性检查点实现的,当有故障产生时,应用服务会重启后,再重新加载上一次成功备份的状态检查点信息。结合可重放的数据源,该特性可保证精确一次(exactly-once
)的状态一致性;TB
级的状态信息,对此应用的状态建立检查点服务的资源开销是很高的,为了减小因检查点服务对应用的延迟性(SLAs
服务等级协议)的影响,Flink采用异步及增量的方式构建检查点服务。 Flink
为某些特定的存储支持了事务型输出的功能,及时在发生故障的情况下,也能够保证精确一次的输出。Flink
已与多种集群管理服务紧密集成,如 Hadoop YARN, Mesos, 以及 Kubernetes。当集群中某个流程任务失败后,一个新的流程服务会自动启动并替代它继续执行。Flink 被设计为能够很好地工作在上述每个资源管理器中,这是通过资源管理器特定(
resource-manager-specific
)的部署模式实现的,Flink 可以采用与当前资源管理器相适应的方式进行交互。提交或控制应用程序的所有通信都是通过 REST 调用进行的,这可以简化 Flink 与各种环境中的集成。
Apache Flink 是一个分布式系统,它除了可以作为独立集群运行,同时需要计算资源来执行应用程序,Flink 集成了所有常见的集群资源管理器,例如:
除此,Flink可以运行任意规模应用。应用程序被并行化为可能数千个任务,这些任务分布在集群中并发执行,所以应用程序能够充分利用无尽的 CPU、内存、磁盘和网络 IO,而且 Flink 很容易维护非常大的应用程序状态,其异步和增量的检查点算法对处理延迟产生最小的影响,同时保证精确一次状态的一致性。
好了,至此已经讲完了为何选择Flink作为实时计算的技术实现的原因了,那么目前的市面上是否有实时计算的解决方案呢?其实在Flink的官方网站已经提供了一些供应商的解决方案参考:https://nightlies.apache.org/flink/flink-docs-release-1.15/zh/docs/deployment/overview/。
下面来举几个例子。
实时计算Flink版:https://help.aliyun.com/product/45029.html
操作参考文档:
数据开发治理平台(Wedata):https://cloud.tencent.com/document/product/1267
操作参考文档:https://cloud.tencent.com/document/product/1267/72515
目前的产品其实已经支持了,只是官方的文档没有更新
操作文档参考:https://support.huaweicloud.com/usermanual-dli/dli_01_0403.html
青云科技: https://docsv3.qingcloud.com/bigdata/dataomnis/intro/introduction/
操作文档:https://docsv3.qingcloud.com/bigdata/dataomnis/quickstart/summary/
操作文档:https://docs.ververica.com/getting_started/index.html
本文主要讲解了实时计算的一些概念、实时计算的Flink技术实现、实时计算的解决方案参考,希望能帮助到大家,谢谢大家的阅读,本文完!