一、Storm
Storm是一个实时的可靠地分布式流计算框架。一个典型的大数据实时计算应用场景:从Kafka消息队列读取消息(可以是logs,clicks,sensor data);通过Storm对消息进行计算聚合等预处理;把处理结果持久化到数据库或者HDFS做进一步深入分析。 Storm中分为Topology开发和Trident开发,Trident是一种高度抽象的实时计算模型,是一种有状态的流式处理框架,而Topology是一种无状态流式处理框架。
Topology特点:
无状态
低延迟
开启ack后保证tuple至少一次处理
Trident特点:
有状态
批处理
提供有且只有一次的处理语义
选择策略:
若需要有且只有一次的批处理统计则选择Trident,其他情况使用Topology即可满足。
二、批处理策略
对消息预聚合时,通常是将多个tuple的计算结果存储到数据库中,即批处理的概念。使用Storm来进行批处理大概有三种方案:Trident API、Storm windowing、自定义批处理 (如利用TickTuple)。
- Trident API
1.1 基本概念
Trident从概念上就是以Batch为处理单元,是天然的批处理方案。Tident提供了 joins(数据流融合), aggregations(聚合), grouping(分组), functions(自定义函数), 以及 filters(过滤)等功能。除此之外,Trident 还提供了一些专门的原语,从而在基于数据库或者其他存储的前提下来应付有状态的递增式处理。但由于存储了状态信息,性能相比Topology有所下降。