流处理的关键概念

2025年3月17日 | 阅读 3 分钟

用户应该了解的流处理概念如下:

Key concepts of Stream Processing

时间

这是一个重要且容易混淆的概念。在流处理中,大多数操作都依赖于时间。因此,时间的一个共同概念是此类流应用程序的典型任务。

Kafka 流处理涉及以下时间概念:

  1. 事件时间: 事件发生的时间,也是最初创建记录的时间。因此,事件时间在流数据处理期间至关重要。
  2. 日志追加时间: 事件到达 Broker 以进行存储的时间点。
  3. 处理时间: 流处理应用程序接收到事件以应用某些操作的时间。时间可以是毫秒、天或小时。这里,根据每个流处理应用程序读取事件的确切时间,将不同的时间戳分配给同一事件。此外,同一应用程序中的两个线程的时间戳也可能不同。因此,处理时间非常不可靠,最好避免使用。

国家

在流处理应用程序中维护着不同的状态。

状态包括:

  1. 内部或本地状态: 只能由特定流处理应用程序实例访问的状态。内部状态通过应用程序内的嵌入式内存数据库进行管理和维护。虽然本地状态速度极快,但内存大小有限。
  2. 外部状态: 维护在外部数据存储(例如 NoSQL 数据库)中的状态。与内部状态不同,它提供几乎无限的内存大小。此外,它可以从不同的应用程序或它们的实例访问。但是,它会带来额外的延迟和复杂性,因此某些应用程序可以避免使用。

流表对偶性

表是记录的集合,这些记录通过主键进行唯一标识。查询用于检查特定时间点的数据状态。表不包含历史记录,除非我们专门设计它。另一方面,流包含更改的历史记录。流是事件字符串,其中每个事件都会导致更改。因此,表和流是同一枚硬币的两面。因此,要将表转换为流,用户需要捕获修改表的命令。诸如 insert、update 和 delete 之类的命令被捕获并存储到流中。此外,如果用户想要将流转换为表,则需要转换流包含的所有更改。这种转换过程也称为物化流。因此,我们可以拥有将流更改为表以及将表更改为流的双重过程。

时间窗口

术语“时间窗口”表示将总时间划分成多个部分。因此,某些对流的操作依赖于时间窗口。此类操作称为窗口操作。例如,在两个流上执行的连接操作是窗口化的。尽管人们很少关心他们的操作需要哪种类型的窗口。