【Storm】Trident state 概念

核心概念

Trident在读写有状态的数据源方面是有着一流的抽象封装;状态即可以保留在topology的内部,如内存(但易丢失,服务器重启后不可用),也可以放到外部存储当中,如HDFS,Memcached(内存级数据库)或no-sql数据库(如Hbase)。这些都是使用同一套Trident API。

Trident以一种容错的方式来管理状态(状态指结果数据),以至于当你在更新状态的时候你不需要去考虑错误以及重试的情况。这种保证每个消息被处理有且仅有一次的原理会让你更放心的使用Trident的topology。

回顾之前讲解事务章节时:

Spout类型 DB中存储
普通Spout [count = 3]
事务Spout [txid = 1, count = 3]
不透明事务Spout [txid = 2, value = 3, prevValue = 1]

 

 

 

 

 

核心概念state及API

Opaque transactional state有着最为强大的兼容性,但是这是以存储更多的信息作为代价的。transactional states需要存储较少的状态信息,但是仅能和transactional spouts协同工作。最后,non-transactional state所需要存储的信息最少,但是却不能实现有且仅有一次被成功处理的语义。

state和spout类型的选择其实是一种在容错性和存储消耗之间的权衡,根据应用的需要会进行选择。

State API

Trident把所有容错相关的逻辑都放在了state里面。作为一个用户,你并不需要自己去处理复杂的txid,存储多余的信息到数据库中,或者是任何其他类似的事情。

TridentTopology topology = new TridentTopology();
TridentState wordCounts = topology.newStream("spout1", spout)
		.parallelismHint(16)
		.each(new Fields("sentence"), new Split(), new Fields("word"))
		.groupBy(new Fields("word"))
		.persis
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值