流式计算典型系统技术分析|学习笔记

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 快速学习流式计算典型系统技术分析

开发者学堂课程【分布式计算入门流式计算典型系统技术分析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/375/detail/4706


流式计算典型系统技术分析


目录:

一、业界典型系统技术概要分析


一、业界典型系统技术概要分析

1. Twitter Strom

(1)Twitter 内部使用、开源,被广泛使用的一套流计算系统

核心概念

Topology

完整地流计算作业

Spout

收集数据的任务

Bolt

进行相关计算的任务

Task Spout

Spout 、Bolt 负责某一数据分片的实体(调度的最小单位)

Acker

负责跟踪消息是否被处理的节点

(2)异或^

a^a=0  成对出现的一组数异或后都得0

a^b^a^b=0 与成对出现的顺序无关

Strom 很巧妙地利用了这个特性来跟踪整个数据数。也就是说它在任何一个 bolt 做处理的时候,先生成一个随机数。将这个随机数汇报到 acker。Acker 把那个数跟原来的那个数进行异或操作,然后 strom 将这个异或值传递到子节点。子节点在处理完成以后,将这个传递下来的数发给 acker 进行异或处理,同时迭代刚才那个过程。所以如果没有任何问题的话,那么任何的节点这个值都会成对出现,那最终这批数据处理完后, acker 将会异或成0。如果没有异或成0,将视为发生了故障,将会从源头重播这个数据。

acker 针对每个数据都进行这样的操作,所以在实战中会发现当 bench 的数据设置的非常小的时候,那么整个 acker 的数据,将会和本身数据量同等量级,这将会极大地影响整个系统的吞吐和性能。

这也是 storm  acker 机制非常致命的弱点。

(3)Nimbus-Zookeeper-Supervisor

系统单点(无状态)

负责接受 Topology ,进行资源调度

将调度信息记录到 Zookeeper 中

定期检查  Zookeeper 中各个 Supervisor  的心跳信息

根据心跳状态,决定是否重新调度

每台物理机上启动一个(无状态)

轮询 Zookeeper  中的调度任务信息,启动、删除  Task

定期将心跳信息写入 Zookeeper

容错

数据→发送→处理→ Acker 成功容易出现数据丢失 重复

那么在流式计算中间,其实要保证数据的完全的精确,所面临的问题要比离线和批量计算要复杂。因为整个数据是一个有状态的计算,所以整个数据到发送到处理结点到 acker 成功整个过程并不是原子操作。所以很容易出现数据的丢失、数据重复等问题。那么数据的丢失,可以被利用重播机制来解决,但是重播机制无法解决数据 onlyonce 的语义,也就是说数据多不少只被处理一次。

(4)Transactional Topology

需要跟踪整个源头数据的所有子孙消息

如何解决消息被重复处理的问题

1.png

注:用户代码利用唯一的 Batch ID 进行去重

storm 在 spout 上将源头消息串行的划分成一个一个的 bench ,将每个 bench 赋予一个完全递增的一个 ID ,记录在 ronkeep 中。那么利用 acker 机制来跟踪整个 bench 的数据是不是未完全处理,超时和节点异常情况下 spout 会种整体重播这个 bench 内的所有消息,影响中间状态的操作可以被并罚执行。用户可以有机会利用唯一的 bench 进行驱虫,也就是说假设你进行了一个加法操作,实际上用户这部分代码,整个计算是有状态计算。所以用户可能把这批的数据进行了加法操作。所以有可能计算成功,但是 acker 回去失败。

那么做一个有状态的计算,他不可能说把这个数据再重新全部去计算一遍,那么这个计算的结果会被累加,会被重复计算。所以 storm 给一个机会,给你分配了一个唯一的 id ,让用户代码自己去实践驱虫逻辑。

限制

整个 Topology 同一时刻只能有一个 Batch 正在执行

当然 stormy 要让用户使用这个唯一的id去做驱虫,它就有一个很强的约束,节点计算可以分布式计算,但是真正去提交到持久化状态的时候,整个拓扑同一时刻只能有一个 bench 的印象。正在执行这个提交操作。

(5)优点

消息在框架内不落地,处理非常高效

保证了消息至少被处理

Transactional Topology 为消息去重提供了可能

调度模式简单,扩展能力强

社区资源丰富

Transactional Topology 对 Batch 串行执行方式,性能下降严重

成本高

(6)动态调整并发度

自主调用 SplitShard\MergeShard

2.Google MillWheel

Bigtable 持久化中间结果

将每个节点的计算输出消息进行持久化

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
7天前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
32 4
|
7月前
|
存储 分布式计算 搜索推荐
【专栏】数据之海,分布式计算、数据存储与管理、数据分析与挖掘成为关键技术
【4月更文挑战第27天】在大数据时代,数据量爆炸性增长、类型多样及处理速度需求提升带来挑战。分布式计算、数据存储与管理、数据分析与挖掘成为关键技术,如Hadoop、Spark、HDFS、NoSQL等。实际应用包括互联网搜索、推荐系统、金融科技、智能城市等领域,大规模数据处理发挥关键作用,持续推动创新与奇迹。
159 3
|
4月前
|
存储 SQL 消息中间件
B端算法实践问题之设计一套实时平台能力如何解决
B端算法实践问题之设计一套实时平台能力如何解决
45 1
|
4月前
|
SQL 监控 大数据
"解锁实时大数据处理新境界:Google Dataflow——构建高效、可扩展的实时数据管道实践"
【8月更文挑战第10天】随着大数据时代的发展,企业急需高效处理数据以实现即时响应。Google Dataflow作为Google Cloud Platform的强大服务,提供了一个完全托管的流处理与批处理方案。它采用Apache Beam编程模型,支持自动扩展、高可用性,并能与GCP服务无缝集成。例如,电商平台可通过Dataflow实时分析用户行为日志:首先利用Pub/Sub收集数据;接着构建管道处理并分析这些日志;最后将结果输出至BigQuery。Dataflow因此成为构建实时数据处理系统的理想选择,助力企业快速响应业务需求。
230 6
|
4月前
|
存储 消息中间件 监控
构建高效的数据流处理系统:从理论到实践
【8月更文挑战第27天】本文旨在通过深入浅出的方式,带领读者探索构建一个高效、可扩展的数据流处理系统的全过程。我们将从基本概念出发,逐步深入到架构设计、技术选型、实现细节,并最终展示如何将理论应用于实际项目中。文章不仅提供代码示例,还着重讨论了在设计和开发过程中遇到的挑战及解决策略,为希望深入了解或构建数据流处理系统的技术人员提供了一份实用指南。
|
数据采集 SQL 数据可视化
79 网站点击流数据分析案例(整体技术流程及架构)
79 网站点击流数据分析案例(整体技术流程及架构)
119 0
|
存储 消息中间件 SQL
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(五)
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)
412 0
|
消息中间件 存储 分布式计算
实时流式计算系统中的几个陷阱
随着诸如Apache Flink,Apache Spark,Apache Storm之类的开源框架以及诸如Google Dataflow之类的云框架的增多,创建实时数据处理作业变得非常容易。这些API定义明确,并且诸如Map-Reduce之类的标准概念在所有框架中都遵循几乎相似的语义。 但是,直到今天,实时数据处理领域的开发人员都在为该领域的某些特性而苦苦挣扎。因此,他们在不知不觉中创建了一条路径,该路径导致了应用程序中相当常见的错误。 让我们看一下在设计实时应用程序时可能需要克服的一些陷阱。
194 0
实时流式计算系统中的几个陷阱
|
存储 数据采集 Oracle
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(一)
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)
465 0
|
存储 SQL 数据采集
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(三)
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)
792 0