下一层是流处理器,它从流处理数据平台中获取事件,并对其进行一系列操作。流处理器消费来自一个或多个主题的数据,然后通过函数对每个事件进行处理。这些函数可以用编程语言编写,也可以是SQL转换。一旦函数被调用,其输出将被写入接收器系统,例如流处理数据平台中的不同主题,甚至另一个数据库。此外,流处理器还可能触发其他分支功能,如发送电子邮件或Slack通知。请参考图2-11。
如果流数据平台中的事件已经符合服务层所需的格式,那么就可能不需要经过流处理器的处理。
图2-11:流处理层
流处理器有三种使用模式,如图2-12所示。
图2-12:流处理器的使用模式
接下来,我们将重点阐述以下模式:
流式分析
流式分析是指对输入数据流进行连续的计算处理。举例来说,我们能够实施各种聚合操作,包括计数,寻找最大值、最小值或计算平均值等。这些处理结果一般由流处理引擎保存在内存中,同时也可能以容错的方式存储,确保流处理引擎能从故障中迅速恢复。
事件驱动的微服务
事件驱动的微服务是一种架构模式,在这种模式下,微服务通过初始的事件消费来进行交互。这种技术能够显著降低延迟,因此非常适合用于欺诈检测等场景。
流式ETL
流式ETL在构建实时数据管道方面扮演着关键角色。我们编写独立的函数,并将它们串联起来,最终利用它们完成有意义的任务。当事件在管道中传递时,我们可以灵活地对事件进行无状态操作,例如过滤、路由或映射。同时,我们还可以进行有状态操作,比如利用窗口技术将不同的数据流连接起来,或者将数据流与静态数据集结合,从而丰富流数据的信息内容。
在实时分析的场景中,流处理器主要应用于流式ETL和流式分析处理。
在与流数据平台的比较中,流处理技术领域显得尤为丰富多彩,涵盖了从基于JVM的传统流处理引擎,如Flink、Spark Structured Streaming、Apache Beam以及Kafka Streams等,到基于Python的现代化工具,比如Bytewax、Faust和Quix。当你阅读本文的时候,新的工具可能已经在该领域涌现。
面对众多选择,如何决定使用哪种流处理器呢?关键在于,首先明确是否需要支持有状态处理。若仅需无状态处理,那么可以从众多选项中灵活挑选;然而,如果涉及有状态处理,选择范围将显著缩小。
确定了这一点后,接下来需要考虑流处理器所支持的编程语言。某些流处理器可能需要特定的编程语言,如Java或Python,但许多现代工具已经将SQL作为首选的支持语言。
正如选择流处理平台时一样,为了确保所选工具能够满足可扩展性和延迟的需求,进行基准测试是不可或缺的步骤。