storm源代码分析—Transactional spouts

storm源代码分析—Transactional spouts

大家好,又见面了,我是全栈君。

Transactionalspouts

Trident是以小批量(batch)的形式在处理tuple。而且每一批都会分配一个唯一的transaction id。不同spout的特性不同,一个transactionalspout会有例如以下这些特性:
1、有着相同txid的batch一定是一样的。

当重播一个txid相应的batch时,一定会重播和之前相应txid的batch中相同的tuples。

2、各个batch之间是没有交集的。每一个tuple仅仅能属于一个batch
3、每个tuple都属于一个batch,无一例外
这是一类很easy理解的spout。 tuple 流被划分为固定的batch而且永不改变。(trident-kafka 有一个 
transactional spout 的实现。

你或许会问:为什么我们不总是使用transactional spout?这非常easy理解。

一个原因是并非全部的地方都须要容错的。举例来说。TransactionalTridentKafkaSpout 工作的方式是一个batch包括的tuple来自某个kafka topic中的全部partition。一旦这个batch被发出,在不论什么时候假设这个batch被又一次发出时,它必须包括原来全部的tuple以满足 transactional spout的语义。如今我们假定一个batch被TransactionalTridentKafkaSpout所发出,这个batch没有被成功处理,而且同一时候kafka的一个节点也down掉了。你就无法像之前一样重播一个全然一样的batch(由于kakfa的节点down掉,该topic的一部分partition可能会无法使用)。整个处理会被中断。

这也就是”opaque transactional” spouts(不透明事务spout)存在的原因 – 他们对于丢失源节点这样的情况是容错的,仍然可以帮你达到有且仅仅有一次处理的语义。后面会对这样的spout有所介绍。
在讨论”opaque transactional” spout之前,我们先来看看如何为transactional spout设计一个具有exactly-once语义的State实现。这个State的类型是”transactionalstate” 而且它利用了不论什么一个txid总是相应相同的tuple序列这个语义。
假如说你有一个用来计算单词出现次数的topology,你想要将单词的出现次数以key/value对的形式存储到数据库中。key就是单词。value就是这个这个单词出现的次数。你已经看到仅仅是存储一个数量是不足以知道你是否已经处理过一个batch的。你能够通过将value和txid一起存储到数据库中。

这种话,当更新这个count之前,你能够先去比較数据库中存储的txid和如今要存储的txid。假设一样。就跳过什么都不做。由于这个value之前已经被处理过了。假设不一样,就运行存储。这个逻辑能够工作的前提就是txid永不改变,而且Trident保证状态的更新是在batch之间严格顺序进行的。

考虑以下这个样例的执行逻辑。假定你在处理一个txid为3的包括以下tuple的batch:
[“man”]
[“man”]
[“dog”]
假定数据库中当前保存了以下这种key/value 对:
man => [count=3, txid=1]
dog => [count=4, txid=3]
apple => [count=10, txid=2]
单词“man”相应的txid是1. 由于当前的txid是3,你能够确定你还没有为这个batch中的tuple更新过这个单词的数量。所以你能够放心的给count加2并更新txid为3. 与此同一时候,单词“dog”的txid和当前的txid是同样的,因此你能够跳过这次更新。此时数据库中的数据例如以下:
man => [count=5, txid=3]
dog => [count=4, txid=3]
apple => [count=10, txid=2]
很多其它精彩内容请关注:http://bbs.superwu.cn
关注超人学院微信二维码:
storm源代码分析---Transactional spouts
关注超人学院java免费学习交流群:
storm源代码分析---Transactional spouts
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115807.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ubuntu 下clion2021.4激活码_通用破解码

    ubuntu 下clion2021.4激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • js二维码生成

    详细介绍可以查看API网站:http://code.ciaoca.com/javascript/qrcode/ (前端开发仓库)一、引入js文件<!– 第一步:引进js文件 –> <script type=”text/javascript” src=”js/jquery.min.js”> \ <script type=”text/java…

    2021年11月30日
  • javachar转int_c中int转char

    javachar转int_c中int转charchar类型的数据转换成int类型的数字。本能反应是这么写的。publicstaticvoidmain(String[]args){charc=’1′;//本能反应是这么写的。inti=c;//或者这么写inti1=(int)c;System.out….

  • ipfs是什么挖矿机制(目前最好的ipfs矿机)

    尽管近期市场正在复苏,但FIL仍在50U左右波动,并未出现太大波动,许多投资者都望而却步。IPFS/FIL不错。为什么货币价格不上涨?这种现象其实已经不正常了,价格的波动和数据的修改都不可能在正常的情况下处于正常的状态,相信华雷新山不会出现任何数字货币的不涨不跌,以前的程序员10年5月btc1万现在10。1000个比特币相当于4亿u。11年过去了,现在还不知道哪位程序员。btc用了将近11年的时间才证明了它的价值。对今天的大多数普通人来说,这是一个不能实现的梦想。eth的概念最初是Vita.

  • 剑指Offer面试题:11.调整数组顺序使奇数位于偶数前面建议收藏

    一题目:调整数组顺序使奇数位于偶数前面二解题思路如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在

    2021年12月19日
  • Http通过header传递参数_contenttype属性

    Http通过header传递参数_contenttype属性参考地址:http://blog.csdn.net/u011936381/article/details/11985517

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号