Flink 入门 (2)

每个重要的流应用程序都是有状态的,只有在个别事件上应用转换的应用程序才不需要状态。任何运行基本业务逻辑的应用程序都需要记住事件或中间结果,以便在稍后的时间点访问它们,例如在接收下一个事件时或在特定的持续时间之后。

Flink 入门

 

在Flink中,应用程序状态是非常重要的。这一点在很多地方都有体现:

Multiple State Primitives : Flink为不同的数据结构(例如,原子值、list、map等)提供状态原语

Pluggable State Backends : 应用程序状态由可插入状态后端管理并进行检查点

Exactly-once state consistency : Flink的检查点和恢复算法保证了故障情况下应用状态的一致性

Very Large State : 由于其异步和增量检查点算法,Flink能够维护几个tb大小的应用程序状态

Scalable Applications : 通过将状态重新分配给更多或更少的worker,Flink支持有状态应用程序的伸缩

Time(时间)

时间是流应用程序的另一个重要组成部分。大多数事件流具有固有的时间语义,因为每个事件都是在特定的时间点产生的。此外,许多常见的流计算都是基于时间的,比如窗口聚合、会话、模式检测和基于时间的连接。流处理的一个重要方面是应用程序如何度量时间,即事件时间和处理时间的差异。

Flink提供了一组丰富的与时间相关的特性:

Event-time Mode : 使用事event-time语义处理流的应用程序根据事件的时间戳计算结果。因此,无论是处理记录的事件还是实时事件,事件时间处理都可以提供准确一致的结果。

Watermark Support : Flink在事件时间应用程序中使用水印来推断时间。 水印还是权衡结果的延迟和完整性的灵活机制。

Late Data Handling : 在带有水印的事件时间模式下处理流时,可能会发生所有相关事件到达之前已经完成计算的情况。这种事件称为迟发事件。Flink具有多个选项来处理较晚的事件,例如通过侧面输出重新路由它们并更新先前完成的结果。

Processing-time Mode : 除了event-time模式外,Flink还支持processing-time语义。处理时间模式可能适合具有严格的低延迟要求的某些应用程序,这些应用程序可以忍受近似结果。 

1.6.  分层API

Flink提供了三层API。每个API在简洁性和表达性之间提供了不同的权衡,并且针对不同的使用场景

Flink 入门

1.7.  Stateful Functions

Stateful Functions 是一个API,它简化了分布式有状态应用程序的构建。 

Flink 入门

 

2.  应用场景

Apache Flink是开发和运行许多不同类型应用程序的最佳选择,因为它具有丰富的特性。Flink的特性包括支持流和批处理、复杂的状态管理、事件处理语义以及确保状态的一致性。此外,Flink可以部署在各种资源提供程序上,例如YARN、Apache Mesos和Kubernetes,也可以作为裸机硬件上的独立集群进行部署。配置为高可用性,Flink没有单点故障。Flink已经被证明可以扩展到数千个内核和TB级的应用程序状态,提供高吞吐量和低延迟,并支持世界上一些最苛刻的流处理应用程序。

下面是Flink支持的最常见的应用程序类型:

Event-driven Applications(事件驱动的应用程序)

Data Analytics Applications(数据分析应用程序)

Data Pipeline Applications(数据管道应用程序) 

2.1.  Event-driven Applications

事件驱动的应用程序是一个有状态的应用程序,它从一个或多个事件流中获取事件,并通过触发计算、状态更新或外部操作对传入的事件作出反应。

事件驱动的应用程序基于有状态的流处理应用程序。在这种设计中,数据和计算被放在一起,从而可以进行本地(内存或磁盘)数据访问。通过定期将检查点写入远程持久存储,可以实现容错。下图描述了传统应用程序体系结构和事件驱动应用程序之间的区别。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzwwx.html