《Storm分布式实时计算模式》——3.5 Trident聚合器

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

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

3.5 Trident聚合器

和function类似,aggregator(聚合器)允许topology组合tuple。不同的是,它会替换tuple的字段和值。有三种聚合器:CombinerAggregator、ReducerAggregator和Aggregator。
3.5.1 CombinerAggregator

CombinerAggregator用来将一个集合的tuple组合到一个单独的字段中,Combiner的签名(Signature)如下所示:


1afecfef595e15e396f886e7067d5c4beb74cf6a

Storm对每个tuple调用init()方法,然后重复调用combine()方法直到一个分片的数据处理完成。传递给combine()方法的两个参数是局部聚合的结果,以及调用了init()返回的值。分片会在后面的部分详细介绍,分片实际上就是tuples组成的数据流在同一个机器上的一个子集。将tuple生成的值进行组合之后,Storm发送组合结果作为一个新的字段。如果分片是空的,Storm会发送zero()方法执行的返回。
3.5.2 ReducerAggregator
ReducerAggregator接口有一点区别,签名如下:

93628b153d2c75462ab17b915ee62ba7b6e5bce6

Storm调用init()方法来获取原始值。然后为分片中的每一个tuple调用reduce()方法,直到分片数据处理完成。第一个参数是局部的聚合结果。这个方法的实现需要将第二个参数tuple合并到局部聚合结果中返回。
3.5.3 Aggregator
最通用的聚合操作是Aggregator。签名如下所示:

2da1b6f432c4af50a8dc7ac7d3db7091db22c566

Aggregator接口的aggregate()方法和function接口的execute()方法类似,但是多了一个value参数。这样Aggregator就可以在处理tuple的时候累积值。注意,在Aggregator接口中,aggregate()和complete()方法都有collector这个参数,通过它可以发射任意个数的tuple。在我们的topology例子中,我们利用了一个内置的Count的Aggregator。Count的实现如下面代码片段所示:

8eecd2bb76cf8372870ee0ce38d611127e7c0a0a

我们在示例topology中使用了分组和计数来统计在一个城市附近一个小时内发生疾病的次数。实现代码如下所示:

f450c66221fa16f59114b7aff11b3a1279ce8cbc

回顾Storm在不同机器上的数据的分片,如图3-2所示。

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

groupBy()方法强制数据重新分片,将特定字段值相同的tuple分组到同一个分片中。为了做到这个,Storm必须将相似的tuple发送到相同的主机上。图3-3展示了数据被groupBy()重新分组后的分片情况。


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

分片后,agreagte函数在每个分片数据的每个分组中运行。在我们的例子里,根据城市、小时、疾病代码作为分组的关键词。然后Count aggregator在每个分组上执行,将计数发射给下游的消费者组件。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
3月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
144 3
|
3月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
118 0
|
3月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
107 0
|
2月前
|
监控
Saga模式在分布式系统中保证事务的隔离性
Saga模式在分布式系统中保证事务的隔离性
|
3月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
99 4
|
4月前
Saga模式在分布式系统中如何保证事务的隔离性
Saga模式在分布式系统中如何保证事务的隔离性
|
3月前
|
资源调度 分布式计算 大数据
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
149 0
|
5月前
|
开发者 云计算 数据库
从桌面跃升至云端的华丽转身:深入解析如何运用WinForms与Azure的强大组合,解锁传统应用向现代化分布式系统演变的秘密,实现性能与安全性的双重飞跃——你不可不知的开发新模式
【8月更文挑战第31天】在数字化转型浪潮中,传统桌面应用面临新挑战。本文探讨如何融合Windows Forms(WinForms)与Microsoft Azure,助力应用向云端转型。通过Azure的虚拟机、容器及无服务器计算,可轻松解决性能瓶颈,满足全球用户需求。文中还提供了连接Azure数据库的示例代码,并介绍了集成Azure Storage和Functions的方法。尽管存在安全性、网络延迟及成本等问题,但合理设计架构可有效应对,帮助开发者构建高效可靠的现代应用。
46 0
|
3月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
1月前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
164 5

热门文章

最新文章