storm trident 事务和 spout和state有关

首先spout有三种:这些关系到相同的batchid里面是否包含相同的tuple

事务性:相同

模糊事务性:如果取不到原来的,则拿新的

无事务:不一定

所以只有事务性才能做到一个tuple唯一一次处理

模糊事务性 才能做到 最多处理一次

而无事务,则可能处理多次

————————

而在State这里,

它会提供两个方法基类方法:

beginCommit(Long txid)

commit(Long txid)

来完成事务性操作

如果真正要完成事务型操作,需要写txid或者preval到数据库里,才能真正实现数据的事务

这需要实现上面两个方法,storm已经提供了实现了这两个方法的State,这样写到数据库里,会有额外信息,比如MemcacheState

但是很多State在这两个方法的实现里都是空,所以也就是并没有做相关的数据,只是简单的数据持久化

但是要做到一条数据最多只被处理一次,那么只需要控制spout就可以了,State不需要做什么

对State可以有query,update方法,来将数据通过State方法,持久化!!

persist的时候,需要调用getStateFactory操作回去StateFactory,然后要有一个updater方法,里面调用State的update方法,来实现数据的持久化

查询的过程,是StateFactory+query方法,这个query方法调用State的query方法

State里的update和query,最好是批量的,这样可以减少和数据库的交互次数!!

可以研究一下Hbase的State!

原文地址:https://www.cnblogs.com/brainstorm/p/9094890.html

时间: 2024-09-30 03:31:15

storm trident 事务和 spout和state有关的相关文章

Storm专题二:Storm Trident API 使用详解

一.概述 Storm Trident中的核心数据模型就是"Stream",也就是说,Storm Trident处理的是Stream,但是实际上Stream是被成批处理的,Stream被切分成一个个的Batch分布到集群中,所有应用在Stream上的函数最终会应用到每个节点的Batch中,实现并行计算,具体如下图所示: 在Trident中有五种操作类型: Apply Locally:本地操作,所有操作应用在本地节点数据上,不会产生网络传输 Repartitioning:数据流重定向,单纯

storm trident 示例

Storm Trident的核心数据模型是一批一批被处理的“流”,“流”在集群的分区在集群的节点上,对“流”的操作也是并行的在每个分区上进行. Trident有五种对“流”的操作: 1.      不需要网络传输的本地批次运算 2.      需要网络传输的“重分布”操作,不改变数据的内容 3.      聚合操作,网络传输是该操作的一部分 4.      “流”分组(grouby)操作 5.      合并和关联操作 批次本地操作: 批次本地操作不需要网络传输,本格分区(partion)的运算

Storm批处理事务API详解

看此博文前,建议先查看 Storm批处理事务原理详解 为什么要进行批处理(Batch)? 逐个处理单个tuple,增加很多开销,如写库.输出结果频率过高 事务处理单个tuple效率比较低,因此storm中引入batch处理 批处理是一次性处理一批(batch)tuple,而事务则确保该批次要么全部处理成功,如果有处理失败的则全部不计,Storm会对失败的批次重新发送,且确保每个batch被且仅被处理一次 Spout有三种: 分别为: 1. ITransactionalSpout<T>,同Bas

storm trident function函数

package cn.crxy.trident; import java.util.List; import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.generated.StormTopology; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Values; import storm.trid

storm(二) 事务机制

前言 为了保证tuple的强有序和exactly-once语义,storm提供了事务机制,为每个tuple提供一个id 设计方法1 为每个tuple设置一个事务id,在数据库保存事务id和当前处理的id做比较. 1.两个id不一样,由于事务的强有序特点,判断出该tuple没有出现过,所以更新id 2.id一样,重复出现,可以不用处理 问题: 这样做会导致新能很低,每个tuple都必须处理完后才能处理下一个tuple(否则会影响和下一个tuple的顺序),并且每个tuple还得至少访问一次数据库

storm trident merger

import java.util.List; import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.generated.StormTopology; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Values; import storm.trident.Stream; import storm.

storm trident 的介绍与使用

一.trident 的介绍 trident 的英文意思是三叉戟,在这里我的理解是因为之前我们通过之前的学习topology spout bolt 去处理数据是没有问题的,但trident 的对spout bolt 更高层次的一个抽象,其实现功能是一样的,只不过是trident做了更多的优化和封装.如果对处理的性能要求比较高,建议要采用spout bolt 来处理,反之则可以用trident trident 你可以这样理解,本身这个拓扑就是分散的,如果一个spout 可以有2个bolt,跟三叉戟比

storm trident State

State 是用来 管理 从数据存储中 查询数据(使用batch中的tuple作为输入来查询) 插入和更新数据(把batch中的tuple更新或者插入到数据存储) 里面涉及到事务管理 对于,数据存储是kv结构的, 会有专门的MapStates接口 我们要自己定义支持kv的state,只需要实现 IBackingMap接口 如果要自己实现 State 首先Sate实现类里面需要有查询和更新函数 然后需要继承BaseQueryFunction和BaseStateUpdater 模板类, 来专门实现如

[翻译][Trident] Storm Trident 详细介绍

1.Trident对storm提供了什么能力?2.Trident在如何最大程度的保证执行topogloy性能方面是非常智能的?3.storm如何保证每个消息都被处理一次? Trident是在storm基础上,一个以realtime 计算为目标的高度抽象. 它在提供处理大吞吐量数据能力的同时,也提供了低延时分布式查询和有状态流式处理的能力. 如果你对Pig和Cascading这种高级批量处理工具很了解的话,那么应该毕竟容易理解Trident,因为他们之间很多的概念和思想都是类似的.Tident提供