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
关注超人学院微信二维码:
关注超人学院java免费学习交流群:

storm源代码分析---Transactional spouts的更多相关文章

  1. Twitter Storm源代码分析之ZooKeeper中的目录结构

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

  2. Twitter Storm源代码分析之Nimbus/Supervisor本地目录结构

    storm集群里面工作机器分为两种一种是nimbus, 一种是supervisor, 他们通过zookeeper来进行交互,nimbus通过zookeeper来发布一些指令,supervisor去读z ...

  3. Storm入门(十一)Twitter Storm源代码分析之CoordinatedBolt

    作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/811/twitter-stor ...

  4. Apache 流框架 Flink,Spark Streaming,Storm对比分析(二)

    本文由  网易云发布. 本文内容接上一篇Apache 流框架 Flink,Spark Streaming,Storm对比分析(一) 2.Spark Streaming架构及特性分析 2.1 基本架构 ...

  5. Apache 流框架 Flink,Spark Streaming,Storm对比分析(2)

    此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2.Spark Streaming架构及特性分析 2.1 基本架构 基于是spark core的spark s ...

  6. android-plugmgr源代码分析

    android-plugmgr是一个Android插件加载框架,它最大的特点就是对插件不需要进行任何约束.关于这个类库的介绍见作者博客,市面上也有一些插件加载框架,但是感觉没有这个好.在这篇文章中,我 ...

  7. 转:SDL2源代码分析

    1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...

  8. 转:RTMPDump源代码分析

    0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://. ...

  9. 转:ffdshow 源代码分析

    ffdshow神奇的功能:视频播放时显示运动矢量和QP FFDShow可以称得上是全能的解码.编码器.最初FFDShow只是mpeg视频解码器,不过现在他能做到的远不止于此.它能够解码的视频格式已经远 ...

随机推荐

  1. Linux中图形界面和文本模式相互切换

    1.默认开机进入文本模式 如果想让开机自动进纯文本模式, 修改/etc/inittab 找到其中的 id:5:initdefault: 这行指示启动时的运行级是5,也就是图形模式 改成3就是文本模式了 ...

  2. unbantu相关笔记

    很多项目使用的系统是centos或者redhat,最近有一个项目使用的系统竟然是阿里云unbantu,不知道他们负责人怎么想的,明明有centos,非要用unbantu.抱怨到此,unbantu的学习 ...

  3. EF中执行原生sql与使用Local获取本地数据

    使用DbSet的Local属性可以访问当前context中被追踪且没有被标记为删除的实体(内存中的数据) using (var context = new BloggingContext()) { / ...

  4. WebAPI中Message Handler与Filter的区别

    两者最主要的区别是关注点不同.Message Handlers应用到HTTP Request,Filters仅应用到controller/action上. 如果某种行为应用到大多数的Request时, ...

  5. JavaScript优化参考

    最近在为管理系统的网站做点优化,压缩都用了工具,就没太多可以讨论的. 主要还是代码上的精简和优化.稍微整理一下,顺便做点测试. 这里先贴上项目中用来替代iFrame的Ajax处理的局部代码,本人比较讨 ...

  6. uva 10061 How many zero's and how many digits ?

    How many zeros and how many digits? Input: standard input Output: standard output Given a decimal in ...

  7. 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】

    1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.3 (2) hadoop-1.2.1 (3)hbase-0.92.1 (4)solr-4.9.0 并解压至/opt/jedi ...

  8. eclipse添加xsd

    图片参考 http://wenku.baidu.com/link?url=DFHWF_yD-M-GCt2tfjs1npPs1xhNlyxik7i_pCBjw3oVlbssYrMvLNucuUpKg75 ...

  9. python Tips(不定期更新)

    dictionary sort 1.根据key排序,正向排序 sorted(dic.items(), key=lambda d: d[0]) 2.根据value排序,反向排序 sorted(dic.i ...

  10. Number Sequence--hdu1005

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...