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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介: 快速学习流式计算典型系统技术分析

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

课程地址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 持久化中间结果

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

相关文章
|
Java 调度 Windows
JAVA面试八股文之多线程基础知识
JAVA面试八股文之多线程基础知识
|
12月前
|
关系型数据库 MySQL 测试技术
MySQL外键使用的考量与建议
综上所述,虽然MySQL的外键提供了一种强大的工具来维护数据之间的一致性和完整性,但在决定是否使用外键时,需要权衡其带来的好处和潜在的性能影响。通过仔细的规划和测试,可以最大化地利用外键的优势,同时避免一些常见的陷阱。
352 1
|
10月前
|
监控 API 数据安全/隐私保护
小红书详情API接口的获取与应用
在互联网信息爆炸的时代,小红书凭借丰富的用户生成内容(UGC)和精准的推荐系统迅速崛起,成为重要的社区电商平台。为了帮助开发者高效利用平台数据,小红书开放平台提供了多种API接口,涵盖商品详情和笔记详情等。本文详细介绍了如何注册、申请权限、构建请求、处理响应及应用这些API接口,旨在为开发者提供全面的指南,助力数据驱动的决策与创新。
4189 1
|
10月前
|
数据采集 监控 安全
动态HTTP代理IP的使用技巧与案例分析
本文介绍了动态HTTP代理IP的使用案例与成功经验,包括网络爬虫、信息安全保护、安全访问站点和市场调研等应用场景,以及选择合适代理服务、合理配置请求频率、监控代理IP状态、使用代理池和结合其他技术等实践经验,帮助用户有效利用动态HTTP代理IP,提升工作效率和数据安全性。
230 4
|
安全 Java Shell
一篇文章讲明白LinuxShell远程执行命令(命令行与脚本方式)
一篇文章讲明白LinuxShell远程执行命令(命令行与脚本方式)
161 0
|
Java API Maven
一篇文章讲明白Jetty使用教程(一)——开始使用Jetty
一篇文章讲明白Jetty使用教程(一)——开始使用Jetty
589 0
|
网络协议 Java 测试技术
配置中心原理和选型:Disconf、Apollo、Spring Cloud Config 和 Nacos
学完注册中心,再看配置中心这块,感觉简单很多,因为很多知识原理是相辅相成的
7985 0
配置中心原理和选型:Disconf、Apollo、Spring Cloud Config 和 Nacos
|
JavaScript 安全 前端开发
【Node.js】从入门到精通(一)—— fs 模块全解析
【Node.js】从入门到精通(一)—— fs 模块全解析
263 0
|
运维 Devops 开发工具
PPT & 回放|打破代码评审难落地魔咒,轻松构建基于代码评审的研发流程和文化
代码评审的好处不言而喻,为何实际落地却困难重重? Git 和 Gerrit社区贡献者、云效Codeup开发者 滕龙认为问题主要出在流程工具问题、时间资源限制、自动化程度不足这3方面。 在昨天的直播中,滕龙给出了详细的解法,包含好的代码评审应该怎么做和如何选对工具高效落地2方面。
1121 1
|
负载均衡 监控 定位技术
分库表数据倾斜的处理让我联想到了 AKF 模型
这里的特殊性可以是表中字段的某一个属性,比如订单编号、创建时间等等。这就需要我们根据实际情况,既要拆分的均匀又要拆分之后能满足未来几年的发展,同时还要满足现有业务的支持。
322 0

热门文章

最新文章