《Storm分布式实时计算模式》——3.3 Trident spout

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

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

3.3 Trident spout

让我们先来看topology中的spout。和Storm相比,Trident引入了“数据批次”(batch)的概念。不像Storm的spout,Trident spout必须成批地发送tuple。
每个batch会分配一个唯一的事务标识符。spout基于约定决定batch的组成方式。spout有三种约定:非事务型(non-transactional)、事务型(transactional)、非透明型(opaque)。
非事务型spout对batch的组成部分不提供保障,并且可能出现重复。两个不同的batch可能含有相同的tuple。事务型spout保证batch是非重复的,并且batch总是包含相同的tuple。非透明型spout保证数据是非重复的,但不能保证batch的内容是不变的。
表3-1描述了这些特性。


e574f1d6817ad2083d67ad3afe2a4eefd2741b54

spout接口如下面代码片段所示:

3f85c26bd7fe342a2fc8a165e7544912e6c52500

在Trident中,spout没有真的发射tuple,而是把这项工作分解给了BatchCoordinator和Emitter方法。Emitter负责发送tuple,BatchCoordinator负责管理批次和元数据,Emitter需要依靠元数据来恰当地进行批次的数据重放。TridentSpout函数仅仅是简单地提供了到BatchCoordinator和Emitter的访问方法,并且声明发射的tuple包括哪些字段。下面列出了示例中的DiagnosisEventSpout方法:

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

如上述代码中的getOutputFields()方法所示,在我们的实例topology中,spout发射一个字段event,值是一个DiagnosisEvent类。
BatchCoordinator类实现下述接口:

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

BatchCoordinator是一个泛型类。这个泛型类是重放一个batch所需要的元数据。在本例中,spout发送随机事件,因此元数据可以忽略。实际系统中,元数据可能包含组成了这个batch的消息或者对象的标识符。通过这个信息,非透明型和事务型spout可以实现约定,确保batch的内容不出现重复,在事务型spout中,batch的内容不会出现变化。
BatchCoordinator类作为一个Storm Bolt运行在一个单线程中。Storm会在ZooKeeper中持久化存储这个元数据。当事务处理完成时会通知到对应的coordinator。
在我们的例子中,没有做特定的协调操作,下面就是DiagnosisEventSpout类中使用的协调操作:


726dd1f565b0aee88ccc7f75d41efce744fe22a5


92bab81c270ef1bd437522b533394c48200c0656

Trident spout的第二个组成部分是Emitter。在Storm里,spout使用collector来发送tuple,Emmiter函数在Trident spout中执行这种功能。唯一的区别是,使用TridentCollector类,发送出去的tuple是通过BatchCoordinator类初始化的一批数据。
Emitter方法的接口格式如下所示:

f0cf181bef762cbbe94205b7febe7042d3d473ef

如前面代码所示,Emitter函数只有一个功能,将tuple打包发射出去。为了实现这个功能,函数接收的参数包括batch(由coordinator生成的)的元数据、事务的信息和Emitter用来发送tuple的collector。DiagnosisEventEmitter类的代码如下所示:

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


1a80e7abeb7ca6e95f45eab6de66d386d4f846af

发送的工作在emitBatch()中进行。例子中,我们随机分配一个经度和纬度,大体保持在美国范围内,使用System.currentTimeMillis()方法生成诊断的时间戳。
实际场景中,ICD-9-CM的范围在000到999之间。针对本示例,我们仅使用320到327之间的诊断代码。这些代码如下所示:


d9cbb7b6ba555e1c939b2a0688b8e74a533c7e2d

这些诊断代码随机分配给事件。
在这个例子里,我们使用对象来封装诊断事件。为简化起见,我们将事件的每个组成部分作为tuple的一个独立字段。这里,对象封装还是使用tuple字段进行封装,需要权衡。通常会限制tuple的字段在易于管理的数量之内,但为了数据流控制或tuple的分组策略,将数据放在tuple的字段里还是有意义的。
在我们的例子中,DiagnosisEvent类表示topology处理的关键数据。对象的代码如下所示:


89ddeb0c03596fa01c6ded7721600d120efb6439


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

这个对象是一个简单的JavaBean。时间戳使用long变量存储,存储的是纪元时间的秒数。经度和纬度使用dobule存储。diagnosisCode类使用string,以防系统可能需要处理非ICD-9数据,比如有字母的代码。
至此,topology已经可以发射事件了。在实际场景中,我们可能将topology集成到一个医疗请求处理系统或者一个电子健康记录系统来进行实践演练。
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
23小时前
|
Oracle 关系型数据库 数据处理
实时计算 Flink版产品使用合集之本地local模式下断点续传可以操作吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
20 2
|
1天前
|
SQL 缓存 算法
实时计算 Flink版产品使用合集之可以把初始同步完了用增量模式,但初始数据还是要同步,除非初始的数据同步换成用其他工具先同步过去吧,是这个意思吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 1
|
1天前
|
消息中间件 Java 数据库连接
实时计算 Flink版产品使用合集之将sdkMode从rpc模式改为jdbc模式后,table.exec.mini-batch.enabled参数还生效吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
11 0
|
1天前
|
资源调度 Kubernetes Oracle
实时计算 Flink版产品使用合集之三种集群模式各有啥优缺点,生产环境如何选择
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
15 0
|
3天前
|
存储 NoSQL 分布式数据库
【Flink】Flink分布式快照的原理是什么?
【4月更文挑战第21天】【Flink】Flink分布式快照的原理是什么?
|
3天前
|
运维 监控 Java
面经:Storm实时计算框架原理与应用场景
【4月更文挑战第11天】本文是关于Apache Storm实时流处理框架的面试攻略和核心原理解析。文章分享了面试常见主题,包括Storm的架构与核心概念(如Spout、Bolt、Topology、Tuple和Ack机制),编程模型与API,部署与运维,以及应用场景与最佳实践。通过代码示例展示了如何构建一个简单的WordCountTopology,强调理解和运用Storm的关键知识点对于面试和实际工作的重要性。
39 4
面经:Storm实时计算框架原理与应用场景
|
3天前
|
存储 分布式数据库
GaussDB分布式与单机模式的比较
【4月更文挑战第7天】GaussDB分布式与单机模式的比较
1793 5
|
3天前
|
存储 监控 安全
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
75 1
|
3天前
|
SQL 关系型数据库 MySQL
Flink CDC产品常见问题之读分布式mysql报连接超时如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。