对于TridentSpout和TridentState的理解

TridentSpout基于batch的组成方式三种类型:非事务型,事务型,非透明型。

非事务型:非事务型Spout不能为batch提供任何保证。

事务性:每个batch的txid保持不变,对于一个特定的txid重复执行时,batch中的内容保持不变,例如:

txid=1的batch发送的内容为123,执行失败重复发送时内容仍然为123。

非透明型:能够保证数据是非重复的,每个数据都会在有且仅有一个batch中执行成功,但不保证每个batch中的内容一样,例如:txid=1的batch发送的内容为123,执行失败重复发送时内容有可能变为124,其他batch中不会再出现1234的数据。

TridentState也分为三种类型:非事务型,重复事务型,不透明事务型。

非事务型:不保证任何状态信息

重复事务型:存储每个batch的txid,更新数据时根据txid来判断,当txid相同时不更新,不同时更新

不透明事务型:存储每个batch的txid以及上一个batch的数据,当txid不同时,更新当前值以及上一个状态的值,例如:存储的数据为:{ "value": 2, "prevValue": 1, "txid": 1 },当前的batch需要对value的值加2,当前的txid为2,更新后的数据为:{ "value": 4, "prevValue": 2, "txid": 2 },当txid相同是,说明上一个batch处理失败了,需要用本次的数据覆盖上一次的数据,更新后的数据为:{ "value": 3, "prevValue": 1, "txid": 1}

不同的spout和state能够实现唯一处理的对应关系为:

    state    
    非事务型 事务型 不透明型
spout 非事务型 no no no
  事务型 no yes yes
  不透明型 no no yes

猜你喜欢

转载自my.oschina.net/u/2610576/blog/1535930