分区事务案例实战:详解与案例分析.pdfVIP

  • 0
  • 0
  • 约1.32万字
  • 约 13页
  • 2026-01-27 发布于北京
  • 举报

分区事务案例实战:详解与案例分析.pdf

大纲

事务工作及实现原理

事务API详解和案例分析

3种事务Spout案例开发

注:事务在Trident中进行更高级封装,使用更加方便。

原理相同,掌握原语事务相关知识对打牢基础非常重要。

需求分析

在ITransactionalSpout案例的基础上,用IPartitionedTransactionalSpout实现

实现分析:

只需调整Spout端,Bolt端无需调整

MessageQueue通过创建分区增加发送数据并发,提升吞吐量。

主流MQ如Kafka、MetaQ(MQ)

分区的概念在Trident中有更广的含义和封装

事务主要API

Spout

ITransactionalSpoutT,同

BaseTransactionalSpoutT,普通事务Spout

IPartitionedTransactionalSpoutT,同

BasePartitionedTransactionalSpoutT,分区事务

SpoutIOpaquePartitionedTransactionalSpoutT

:同

BaseOpaquePartitionedTransactionalSpoutT,

不透明分区事务Spout

Bolt

IBatchBoltT:同BaseBatchBoltT,普通批处理

ITransactionalSpoutT普通事务Spout

ITransactionalSpoutT:普通事务Spout

--ITransactionalSpout.CoordinatorX

--initializeTransaction(BigIntegertxid,XprevMetadata):

创建一个新的metadata,当isReady()为true时,该metadata(事务tuple)到

“batchemit”流

--isReady():为true时启动新事务,需要时可以在此sleep

--ITransactionalSpout.EmitterX

--emitBatch(TransactionAttempttx,XcoordinatorMeta,

BatchOutputCollectorcollector):逐个batch的tuple

事务处理流程图

IPartitionedTransactionalSpoutT:分区事务

Spout

IPartitionedTransactionalSpoutT:分区事务Spout,主流事务Spout,原

因是目前主流MessageQueue都支持分区,分区的作用是增加MQ的吞吐量

(每个分区作为个数据源发送点),主流MQ如Kafka、MQ

--IPartitionedTransactionalSpout.Coordinator

--isReady():同上

--numPartitions():返回分区个数。当增加了数据源新分区,同时一个事务

被reyed,此时则不新分区的tup,因为它知道该事务中有多少个分区。

--IPartitionedTransactionalSpout.EmitterX

--emitPartitionBatchNew(TransactionAttempttx,

BatchOutputCollectorcollector,intpartition,XlastPartitionMeta):一个新

的Batch,返回Metadata

--emitPartitionBatch(TransactionAttempttx,BatchOutputCollectorcollector,

intpartition,XpartitionMeta):如果这批消息Bolt消费失败了,

emitPartitionBatch负责重发这批消息

IOpaquePartitionedTransactionalSpout:不透明

分区事务Spout

IOpaquePartitionedTransactionalSpoutT:不透明分区事务Spout

--IOpaquePartitionedTransactionalSpout.Coordinator

--isReady():同上

--IOpaquePar

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档