流处理架构

作为新型系统,Flink扩展了【流处理】这个概念的范围。
有了它,流处理不仅指实时、低延迟的数据分析,还指各类数据应用程序。
其中,有些应用程序基于流处理器实现,有些基于批处理器实现,有些甚至基于事务型数据库实现。
《Flink基础教程》。

传统架构与流处理架构

 对于后端数据而言,典型的传统架构是采用一个中心化的数据库系统,该系统用于存储事务性数据。
 比如数据库(SQL或者NoSQL)拥有”最新的”(或者说”准确”)的数据,这些数据反映了当前的业务状态。
 分布式文件系统则用来存储不需要经常更新的数据,它们也往往是大规模批量计算所依赖的数据存储方式。

 业务规模面临一些问题:

  1. 在许多项目中,从数据到达到数据分析所需的工作流程太复杂、太缓慢。
  2. 传统的数据架构太单一:数据库是唯一正确的数据源,每一个应用程序都需要通过访问数据库来获得所需的数据。
  3. 采用这种架构的系统拥有非常复杂的异常问题处理方法。当出现异常问题时,很难保证系统还能很好地运行。
  4. 需要通过在大型分布式系统中不断地更新来维持一致的全局状态。

 作为一种新的选择,流处理架构解决了企业在大规模系统中遇到的诸多问题。
 以流为基础的架构设计让数据记录持续地从数据源流向应用程序,并在各个应用程序间持续流动。
 不使用数据库来集中存储全局状态数据,取而代之的是共享且永不停止的流数据,它是唯一正确的数据源,记录了业务数据的历史。
 在流处理架构中,每个应用程序都有自己的数据,这些数据采用本地数据库或分布式文件系统进行存储。

消息传输层和流处理层

  1. 消息传输层从各种数据源(生产者)采集连续事件产生的数据,并传输给订阅了这些数据的应用程序和服务(消费者)。
  2. 流处理层有3个用途:持续地将数据在应用程序和系统间移动、聚合并处理事件、在本地维持应用程序的状态。

image

 除了Flink之外,还有其他的流处理工具可供选择(比如Spark Streaming、Storm、Samza和Apex)。

 事实上,在设计高效的流处理架构时,不仅流处理器的选择会造成架构的巨大差异,消息传输层也很关键。
 现代系统之所以更容易处理大规模的流数据,其中很大一部分原因就是消息传输方式的改进,以及流处理器与消息传输系统的交互方式的改变。

消息传输层的理想功能

  1. 兼具高性能和持久性
    消息传输层的一个作用是作为流处理层上游的安全队列——它相当于缓冲区,可以将事件数据作为短期数据保留起来,以防数据处理过程发生中断。
    具有持久性的好处之一是消息可以重播。这个功能使得像Flink这样的处理器能对事件流中的某一部分进行重播和再计算。
    正是由于消息传输层和流处理层相互作用,才使得像Flink这样的系统有了准确处理和”时空穿梭”(指重新处理数据的能力)的保障,认识到这一点至关重要。
  2. 将生产者和消费者解耦
    采用高效的消息传输技术,可以从多个源(生产者)收集数据,并使这些数据可供多个服务或应用程序(消费者)使用。
    数据源将数据推送给消息队列,消费者(或消费者群组)则拉取数据。
    事件数据只能基于给定的偏移量从消息队列中按顺序读出。
    生产者并不向所有消费者自动广播。
    这一点听起来微不足道,但是对整个架构的工作方式有着巨大的影响。
    这种传输方式——消费者订阅感兴趣的主题——意味着消息立刻到达,但并不需要被立刻处理。
    在消息到达时,消费者并不需要处于运行状态,而是可以根据自身的需求在任何时间使用数据。
    这样一来,添加新的消费者和生产者也很容易。
    采用解耦的消息传输系统很有意义,因为它能支持微服务,也支持将处理步骤中的实现过程隐藏起来,从而允许自由地修改实现过程。

image

支持微服务架构的流数据

 微服务方法指的是将大型系统的功能分割成通常具有单一目的的简单服务,从而使小型团队可以轻松地构建和维护这些服务。
 即使是超大型组织,也可以用这种设计实现敏捷。
 若要使整个系统正常工作,各服务之间因通信而产生的连接必须是轻量级的。

数据流作为中心数据源

 在流处理架构中,消息队列(水平圆柱体表示)连接应用程序,并作为新的共享数据源;它们取代了从前的大型集中式数据库。
image

流处理架构用例

image

灵活性

 欺诈检测系统:Flink在欺诈检测器、更新器,甚至刷卡行为分析器都有使用到。
 基于流处理的微服务架构也为欺诈检测系统的开发人员带来了灵活性。
 假设开发团队正试图改进欺诈检测模型并加以评估。
 刷卡行为产生的消息流可以被新模型采用,而完全不影响已有的检测器。

不限于实时应用

image

流的跨地域复制

 来自广告技术领域的例子:流数据分析在不同的数据中心进行,且数据中心有多种基于模型的应用程序,Flink对这些应用程序非常有用。
 每个本地数据中心都需要保存自己的当前事务状态,而它们都从同一个广告资源池读取数据。
 另一个需求是与核心数据中心共享数据,并且可以利用Flink进行全局分析。

image

【完】

GitHub flink-training-exercises
GitHub sql-training
本文知识来源于书本,仅供快速浏览学习,勿盲目转载
GitHub flink-training-course/课程表(持续更新)

邵志鹏 wechat
扫一扫上面的二维码关注我的公众号
0%