之前介绍过如何运行批处理作业来模拟流处理。本文主要介绍一种更好的方法来对事件流进行计数,也就是采用流处理架构来进行计数处理。通过流处理架构来实现应用程序的持续性。
事件流由消息传输系统提供,并且只被单一的Flink作业处理,这种方法直接弥补了之前提到的所有的不足。Flink作业的速度减慢或者吞吐量激增只会导致事件在消息传输系统中堆积。以时间为单位把事件流分割为一批批任务,这种逻辑完全嵌入在Flink程序的应用逻辑中。预警由同一个程序生成,乱序事件由Flink自行处理。要从以固定事件分组改为根据产生苏剧的时间段分组,只需在Flink程序中修改对窗口的定义即可。此外,如果应用程序的代码有过改动,只需重播Kafka主题,即可重播应用程序。采用流处理架构,可以大幅减少需要学习、管理和编写代码的系统。
流处理区别于批处理最主要的两点是:流即是流,不必人为地将她分割为文件;事件的定义被明确地写入应用程序代码,而不是摄取、计算和调度等过程牵扯不清。
流处理中的批处理
首先介绍一下微批处理,是介于流处理和批处理之间的方法。
Storm Trident是这样实现微批处理的:
它先创建一个大的Storm事件,其中包含固定数量的子事件;
然后将这些聚合在一起的子事件用持续运行的Storm拓扑处理。
流处理系统中的批处理必须符合以下两点:
1,批处理只作为提高系统性能的机制。批量越大,系统的吞吐量就越大。
2,为了提高性能而使用的批处理必须完全独立于定义窗口时所用的缓冲,或者为了保证容错性而提交的代码,也不能作为API的一部分。否则系统将受到限制,并且变的脆弱而难以使用。
网友评论