一、Storm Trident概述及特性
Trident是在storm基础上,一个以realtime 计算为目标的高度抽象。 它在提供处理大吞吐量数据能力的同时,也提供了低延时分布式查询和有状态流式处理的能力。好比 Mapreduce框架的Pig,Trident是Storm提供的基于基本API开发的高级框架。Trident提供了 joins, aggregations, grouping, functions, 以及 filters等能力。
除此之外,Trident 还提供了一些专门的原语,从而在基于数据库或者其他存储的前提下来应付有状态的递增式 处理。
Trident是完全容错的,拥有有且只有一次处理的语义,其实就是transactional的高级封装。这就让你可以很轻松 的使用Trident来进行实时数据处理。Trident会把状态以某种形式保持起来,当有错误发生时,它会根据需要来恢复 这些状态。
Trident封装了transactional事务类,所以我们不再需要学习Batch相关的基础API了,减轻了学习成本。
trident每次处理消息均以batch为单位,即一次处理多个元组
trident是storm的更高层次抽象,主要提供了3个方面的好处:
(1)常用的count,sum等封装成了方法,可以直接调用不需要自己实现。
(2)提供一次原语,如groupby等。
(3)提供事务支持,可以保证数据均处理且只处理了一次(恰好一次)
如果我们开发一个对文本中的词频进行统计的程序,使用Storm框架的话我们需要开发三个Storm组件:
1.一个Spout负责收集文本信息并分段,做为sentence字段发送给下游的Bolt
2.一个Bolt将每段文本分词,将分词结果以word字段发送给下游的Bolt
3.一个Bolt对词频进行统计,把统计结果记录在count字段并存储
如果使用Trident我们可以使用一下代码完成上述操作:
二、TridentTopology与StormToplogy
(1)区别
StormToplogy:
TridentTopology
(2)联系
spout的消息流涉及到的核心类
三、TridentTopology的可靠性机制详解
四、Storm Trident API讲解