Flink是一款非常优秀的流式计算框架,而ClickHouse是一款非常优秀的OLAP类引擎,它们是各自所处领域的佼佼者,这一点是毋庸置疑的。Flink除了各种流式计算场景外也必然可以用于流式统计,ClickHouse同样也可以用于流式统计,但我不认为它们是优秀的流式统计工具。XL-Lighthouse在流式统计这个细分场景内足以完胜Flink和ClickHouse。在企业数据化运营领域,面对繁杂的流式数据统计需求,以Flink和ClickHouse以及很多同类技术方案为核心的架构设计不能算是一种较为优秀的解决方案。
一、从流式统计的特点说起
1、 流式统计是流式计算中的一种特殊运算形式
一个Flink任务只能并行处理一个或少数几个数据流,而XL-LightHouse一个任务可以并行处理数万个、几十万个数据流;一个Flink任务只能实现一个或少数几个数据指标,而XL-LightHouse单个任务就能支撑大批量、数以万计的数据指标。
流式计算是一个很宽泛的概念,目前没有办法用特定的某些运算操作类型将其抽象出来。流式计算是基于事件流驱动的运算方式,常见的应用场景有:计算用户实时画像、实时推荐、监控告警、实时电信反诈骗等等。正是因为目前流式计算没有办法通过某些运算操作类型将其抽象,所以只能从“流式数据处理过程”这种宽泛的视角来解决此类问题。因此我们可以看到不管是Flink还是Spark,都有类似数据源(Source)、转化操作(Map)、执行操作(Action)、窗口(Window)、结果处理(Sink)这类概念,因为这些概念都是围绕着“流式数据处理过程”而衍生出来的。当然Flink的工程师为了扩充其适用场景、提高产品的完善度,提供了类似状态管理、水印、聚合函数等等功能,但也都不可能脱离流式数据处理过程的主线。
而反观流式统计虽然是属于流式计算的一种计算形式,但它其实是一种完全可以被抽象成几种运算操作类型的计算形式。绝大多数的流式统计无外乎Count运算、Sum运算、Bitcount运算(count distinct)、Max运算、Min运算、Avg运算、Seq运算(时序数据)、Dimens运算(维度划分)、Limit运算(topN/lastN),然后再结合时间窗口(滚动窗口、滑动窗口)的划分就可以完成一个个的流式数据统计需求。任何一类业务需求只要可以被抽象成若干种运算操作类型,那就一定可以为此类业务需求设计出一种与其适配的通用化解决方案。这个过程就像Photoshop将所有图片处理的操作抽象出移动工具、钢笔工具、圈选工具、裁剪工具、橡皮擦工具等,关系型数据库将所有数据相关操作抽象出增加、删除、修改、查询、事务、索引等过程类似。而很显然Flink、Spark面对流式计算场景,自身都没有基于这种“功能抽象”的概念来实现。
正因为Flink、Spark在流式处理方面都是基于宽泛的流数据处理过程所设计,所以流式计算的实现并不是一种“通用化”解决方案。每个Flink任务只能并行处理一个或少数几个数据流,而窗口则对应与之相应的数据流。这种设计如果从流式计算的角度来看并无问题,但如果从流式统计这个细分领域的角度来看却明显先天不足。从某种程度上来说Flink和Spark由于其自身定位,它们的这种设计方案只能将流式计算中的非流式统计任务的执行效率发挥到极致,而远远不可能将流式统计的效率发挥到极致。所以我一直认为:Flink和Spark称得上是优秀的流式计算工具,但根本不能算是优秀的流式统计工具。流式统计是一种可以被抽象的计算形式,所以必然能够为其设计出一套通用型且性能远远超过Flink和Spark的技术方案。这个原因就好比是专用的水果刀用来削苹果要比功能繁杂的瑞士军刀好用一样。
而XL-Lig