【Storm】Strom事务主要API及官方案例分析

本文详细介绍了Storm的事务API,包括ITransactionalSpout、IPartitionedTransactionalSpout和IOpaquePartitionedTransactionalSpout。重点阐述了它们在事务处理、分区事务、元数据管理和消息重发等方面的功能,并通过官方入门案例分析了如何使用这些API实现事务处理。
摘要由CSDN通过智能技术生成

1、事务主要API

(1)Spout

(a)ITransactionalSpout<T>,同BaseTransactionalSpout<T>,普通事务Spout
(b)IPartitionedTransactionalSpout<T> ,接口,分区事务,增加消息队列吞吐量,现在的消息队列大多支持分区;同BasePartitionedTransactionalSpout<T>,类,常用接口而不用类,因为接口可以实现多个,类只能继承一个,分区事务Spout
(c)IOpaquePartitionedTransactionalSpout<T>:同BaseOpaquePartitionedTransactionalSpout<T>,不透明分区事务Spout
使用最广泛

(2)Bolt 
(a)IBatchBolt<T>:同BaseBatchBolt<T>,普通批处理;
(b)BaseTransactionalBolt:事务Bolt,是IBatchBolt的子类;

execute:逐个处理一个批次的每一个tuple

finishBatch:批次处理完了,才会执行。

prepare:初始化方法,T 是 批次ID

比如一个batch有10个tuple,execute会执行10次,finishbatch只会执行一次;

BaseTransactionalBolt继承自IBatchBolt,prepare方法中:T 是 transactionAttempt 事务标识类

(3)Icommitter

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

 

事务内部处理流程图

2、 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

3、 IPartitionedTransactionalSpout<T>:分区事务Spout

IPartitionedTransactionalSpout<T>:分区事务Spout,主流事务Spout,原因是目前主流Message Queue都支持分区,分区的作用是增加MQ的吞吐量(每个分区作为一个数据源发送点),主流MQ如Kafka、RocketMQ

-- IPartitionedTransactionalSpout.Coordinator   -- isReady() :同上    
  -- numPartitions() :返回分区个数。当增加了数据源新分区,同时一个事务被replayed ,此时则不发射新分区的tuples,因为它知道该事务中有多少个分区。
相比ITransactionalSpout,少了initial方法。多了统计分区数的方法。

-- 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负责重发这批消息

4、IOpaquePartitionedTransactionalSpout:不透明分区事务Spout

IOpaquePartitionedTransactionalSpout<T>:不透明分区事务Spout

--IOpaquePartitionedTransactionalSpout.Coordinator 
  -- isReady() :同上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值