`

Storm事务API

 
阅读更多
Spout
ITransactionalSpout<T>,同BaseTransactionalSpout<T>,普通事务Spout
IPartitionedTransactionalSpout<T>,同BasePartitionedTransactionalSpout<T>,分区事务Spout
IOpaquePartitionedTransactionalSpout<T>:同BaseOpaquePartitionedTransactionalSpout<T>,不透明分区事务Spout


Bolt
IBatchBolt<T>:同BaseBatchBolt<T>,普通批处理
BaseTransactionalBolt:事务Bolt

接口Icommitter:标识IBatchBolt 或BaseTransactionalBolt是否是一个committer CoordinatedBolt


ITransactionalSpout<T>普通事务Spout
ITransactionalSpout<T>:普通事务Spout
  -- ITransactionalSpout.Coordinator<X>
       --initializeTransaction(BigInteger txid, X prevMetadata) :创建一个新的metadata,当isReady() 为true时,发射该metadata(事务tuple)到“batch emit”流
       --isReady() :为true时启动新事务,需要时可以在此sleep

  -- ITransactionalSpout.Emitter<X>
      -- emitBatch(TransactionAttempt tx, X coordinatorMeta,        BatchOutputCollector collector) :逐个发射batch的tuple


IPartitionedTransactionalSpout<T>:分区事务Spout
IPartitionedTransactionalSpout<T>:分区事务Spout,主流事务Spout,原因是目前主流Message Queue都支持分区,分区的作用是增加MQ的吞吐量(每个分区作为一个数据源发送点),主流MQ如Kafka、RocketMQ
-- IPartitionedTransactionalSpout.Coordinator
    -- isReady() :同上    
    -- numPartitions() :返回分区个数。当增加了数据源新分区,同时一个事务被replayed ,此时则不发射新分区的tuples,因为它知道该事务中有多少个分区。

-- IPartitionedTransactionalSpout.Emitter<X>       
    --emitPartitionBatchNew(TransactionAttempt tx, BatchOutputCollector collector, int partition, X lastPartitionMeta) :发射一个新的Batch,返回Metadata
    --emitPartitionBatch(TransactionAttempt tx, BatchOutputCollector collector, int partition, X partitionMeta) :如果这批消息Bolt消费失败了,emitPartitionBatch负责重发这批消息

IOpaquePartitionedTransactionalSpout:不透明分区事务Spout
IOpaquePartitionedTransactionalSpout<T>:不透明分区事务Spout
  --IOpaquePartitionedTransactionalSpout.Coordinator
       --isReady() :同上   --IOpaquePartitionedTransactionalSpout.Emitter<X>
       -- emitPartitionBatch(TransactionAttempt tx, BatchOutputCollector collector, int partition, X lastPartitionMeta)
       -- numPartitions()

它不区分发新消息还是重发旧消息,全部用emitPartitionBatch搞定。虽然emitPartitionBatch返回的X应该是下一批次供自己使用的(emitPartitionBatch的第4个参数),但是只有一个批次成功以后X才会更新到ZooKeeper中,如果失败重发,emitPartitionBatch读取的X还是旧的。所以这时候自定义的X不需要记录当前批次的开始位置和下一批次的开始位置两个值,只需要记录下一批次开始位置一个值即可,例如:
public class BatchMeta {      
   public long  nextOffset; //下一批次的偏移量    
}





分享到:
评论

相关推荐

    trident-gcd:Storm Trident API 的 Google Cloud Datastore 状态实现

    该库在 Google Cloud Datastore ( ) 之上实现了 Trident 状态。 它支持非事务性、事务性和不透明状态类型。

    storm-trident-elasticsearch:基于 Elasticsearch 的 Trident State 实现

    它支持非事务性、事务性和不透明状态类型。 Maven 依赖 &lt; groupId&gt;com.github.fhuss&lt;/ groupId&gt; &lt; artifactId&gt;storm-elasticsearch &lt; version&gt;0.3.0 TupleMapper / TridentTupleMapper 要将文档索引到 ...

    java开源包1

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包11

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包2

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包3

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包6

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包5

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包10

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包4

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包8

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包7

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包9

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    java开源包101

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    Java资源包01

    JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 ...

    JAVA上百实例源码以及开源项目

    百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对...

Global site tag (gtag.js) - Google Analytics