第1章 为何选择Flink
Apache Flink 是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架。Flink不仅能提供同时支持高吞吐和exactly-once 语义的实时计算,还能提供批量数据处理。
Flink 将批处理(即处理有限的静态数据)视作一种特殊的流处理。Flink 分别提供了面向流处理的接口(DataStream API)和面向批处理的接口(DataSet API)。因此,Flink 既可以完成流处理,也可以完成批处理。Flink 支持的拓展库涉及机器学习(FlinkML)、复杂事件处理(CEP),以及图计算(Gelly),还有分别针对流处理和批处理的Table API。
第2章 流处理架构
2.2 消息传输层和流处理层
如何有效地实现流处理架构并从Flink 中获益呢?一个常见的做法是设置消息传输层和流处理层。
- 消息传输层:从各种数据源(生产者)采集连续事件产生的数据,并传输给订阅了这些数据的应用程序和服务(消费者)。
- 流处理层有3个用途:①持续地将数据在应用程序和系统间移动;②聚合并处理事件;③在本地维持应用程序的状态。
2.3 消息传输层的理想功能
2.3.1 兼具高性能和持久性
消息传输层的一个作用是作为流处理层上游的安全队列——它相当于缓冲区,可以将事件数据作为短期数据保留起来,以防数据处理过程发生中断。具有持久性的好处之一是消息可以重播。
2.3.2 将生产者和消费者解耦
采用高效的消息传输技术,可以从多个源(生产者)收集数据,并使这些数据可供多个服务或应用程序(消费者)使用。数据源将数据推送给消息队列,消费者(或消费者群组)则拉取数据。
2.4 支持微服务架构的流数据
微服务方法指的是将大型系统的功能分割成通常具有单一目的的简单服务,从而使小型团队可以轻松地构建和维护这些服务。
2.4.1 数据流作为中心数据源
流处理架构不需要集中式数据库。取而代之的是消息队列,它作为共享数据源,服务于各种不同的消费者。