storm Transactional spouts有哪些特性

87次阅读
没有评论

共计 1816 个字符,预计需要花费 5 分钟才能阅读完成。

本篇内容介绍了“storm Transactional spouts 有哪些特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

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

1、有着同样 txid 的 batch 一定是一样的。当重播一个 txid 对应的 batch 时,一定会重播和之前对应 txid 的 batch 中同样的 tuples。

2、各个 batch 之间是没有交集的。每个 tuple 只能属于一个 batch

3、每一个 tuple 都属于一个 batch,无一例外

这是一类非常容易理解的 spout,tuple 流被划分为固定的 batch 并且永不改变。(trident-kafka 有一个  transactional spout  的实现。)

你也许会问:为什么我们不总是使用 transactional spout?这很容易理解。一个原因是并不是所有的地方都需要容错的。举例来说,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]

“storm Transactional spouts 有哪些特性”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计1816字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)