《Storm分布式实时计算模式》——3.6 Trident状态

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介:

本节书摘来自华章计算机《Storm分布式实时计算模式》一书中的第3章,第3.6节,作者:(美)P. Taylor Goetz Brian O’Neill 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.6 Trident状态

我们现在已经给每个aggregator的分组数据进行了计数,现在想将信息进行持久化存储,以便进一步分析。在Trident中,持久化操作从状态管理开始。Trident对状态有底层的操作原语,但不同于Storm API,它不关心要哪些数据会作为状态存储或者如何存储这些状态。Trident在高层提供了下述的状态接口:


53f0a794f2163a69d70eedf033c09cd81cb9aef8

上面提到了,Trident将tuple分组成一批批数据。每批数据都有自己的事务标识符。在前面的接口中,Trident告诉State对象什么时候开始提交状态,什么时候提交状态应该结束。
和function类似,Stream对象也有方法向topology引入基于状态的操作。更具体说,Trident有两种数据流:Stream和GroupedStream。一个GroupedStream是GroupBy操作的结果。在我们的topology中,我们根据HourAssignment function生成的key对tuple进行分组。
在Steam对象中,下列方法允许topology读和写状态信息:

<a href=https://yqfile.alicdn.com/99bdf19045f0caf67fe3e82f5bd65321f335ea6b.png
" >

stateQuery()方法从state生成了一个输入流,不同参数的几个partitionPersist()方法允许topology从数据流中的tuple更新状态信息。partitionPersist()方法的操作对象是每个数据分片。
在Stream对象的方法外,GroupedStream对象允许topology对一批tuple进行聚合统计,并且将收集到的信息持久化在state中。下列代码是GroupedSteam类中和状态相关的方法:


<a href=https://yqfile.alicdn.com/d8e0e8122e7319f4d4cfd645b58d8827706f2fa3.png
" >


<a href=https://yqfile.alicdn.com/add6a5886c57a6801e018a41a8cefbf9f1baca16.png
" >

和Steam对象类似,stateQuery()方法从State生成一个输入数据流。不同参数的几个persistAggregate()方法允许topology从数据流中的tuple更新状态信息。注意GroupedStream方法有一个Aggregator参数,它在信息写入State对象之前执行。
现在考虑将这些function应用到我们的例子中来。在我们的系统中,需要将事件发生的城市、疾病代码、每小时内产生疾病统计量进行持久存储。这样可以生成报表如表3-2所示。


<a href=https://yqfile.alicdn.com/7f7d4bd921bc1b3526f7cb62a8aac1cf54344a70.png
" >

为了实现这个功能,我们需要将聚集操作中生成的统计量进行持久化存储。我们可以使用groupBy函数返回的GroupedStream接口(如前面所示)调用persistAggregate方法。下面代码是示例topology中具体的调用方式:

814f84a7fac2c6805e4b4be214d909ad584ff0b7

要了解持久化存储,我们首先来看这个方法的第一个参数。Trident使用一个工厂类来生成State的实例。OutbreakTrendFactory是我们的topology提供给Storm的工厂类。OutbreakTrendFactory代码如下:

12a5f28c55df7ac1bb625678fdf05e83a05761c2

工厂类返回一个State对象,Storm用它来持久化存储信息。在Storm中,有三种类型的状态。每个类型的描述如表3-3所示。


3b6471ef71a593e194876e2e671bc302de741840

在分布式环境下,数据可能被重放,为了支持计数和状态更新,Trident将状态更新操作进行序列化,使用不同的状态更新模式对重放和错误数据进行容错。接下来会介绍这些模式。
3.6.1 重复事务型状态
在重复事务型状态中,最后一批提交的数据的标识符存在数据中。当且仅当一批数据标识符的序号大于当前标识符时,才进行更新操作。如果小于或者等于当前标识符,将会忽略更新操作。
为了演示这个实现方法,考虑如表3-4所示的数据批次的序列,这些记录对我们例子中的数据按照key进行聚合计数。


05ed7fb526002d8518c42adac343e62d18ad72f6

这些批次数据按照下列将顺序处理完成:
1 à 2 à 3 à 3 (重放)

处理结果将按照表3-5中的状态变更操作,中间的一列数据用来存储数据标识符,记录最近一次合并进状态的数据批次编号。

b7c7943bf5db98f9c94df7fd689e76cbc65cc2dc

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
80 3
|
2月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
60 0
|
2月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
75 0
|
29天前
|
监控
Saga模式在分布式系统中保证事务的隔离性
Saga模式在分布式系统中保证事务的隔离性
|
2月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
66 4
|
3月前
Saga模式在分布式系统中如何保证事务的隔离性
Saga模式在分布式系统中如何保证事务的隔离性
|
2月前
|
资源调度 分布式计算 大数据
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
103 0
|
4月前
|
开发者 云计算 数据库
从桌面跃升至云端的华丽转身:深入解析如何运用WinForms与Azure的强大组合,解锁传统应用向现代化分布式系统演变的秘密,实现性能与安全性的双重飞跃——你不可不知的开发新模式
【8月更文挑战第31天】在数字化转型浪潮中,传统桌面应用面临新挑战。本文探讨如何融合Windows Forms(WinForms)与Microsoft Azure,助力应用向云端转型。通过Azure的虚拟机、容器及无服务器计算,可轻松解决性能瓶颈,满足全球用户需求。文中还提供了连接Azure数据库的示例代码,并介绍了集成Azure Storage和Functions的方法。尽管存在安全性、网络延迟及成本等问题,但合理设计架构可有效应对,帮助开发者构建高效可靠的现代应用。
33 0
|
存储 SQL 数据采集
从 Storm 迁移到 Flink,美团外卖实时数仓建设实践
本文主要介绍一种通用的实时数仓构建的方法与实践。实时数仓以端到端低延迟、SQL 标准化、快速响应变化、数据统一为目标。
从 Storm 迁移到 Flink,美团外卖实时数仓建设实践
|
3月前
|
运维 数据处理 数据安全/隐私保护
阿里云实时计算Flink版测评报告
该测评报告详细介绍了阿里云实时计算Flink版在用户行为分析与标签画像中的应用实践,展示了其毫秒级的数据处理能力和高效的开发流程。报告还全面评测了该服务在稳定性、性能、开发运维及安全性方面的卓越表现,并对比自建Flink集群的优势。最后,报告评估了其成本效益,强调了其灵活扩展性和高投资回报率,适合各类实时数据处理需求。