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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习流式计算典型系统技术分析

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

课程地址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月前
|
存储 数据处理 数据库
TDengine 用户案例合集 | 智能环保项目的时序数据处理难点与优化实践
本篇文章汇总了三个典型的智能环保项目的数据架构升级实践,给有需要的企业参考。
167 1
|
存储 运维 负载均衡
【分布式技术专题】「架构实践于案例分析」总结和盘点目前常用分布式技术特别及问题分析
【分布式技术专题】「架构实践于案例分析」总结和盘点目前常用分布式技术特别及问题分析
193 0
【分布式技术专题】「架构实践于案例分析」总结和盘点目前常用分布式技术特别及问题分析
|
消息中间件 存储 分布式计算
实时流式计算系统中的几个陷阱
随着诸如Apache Flink,Apache Spark,Apache Storm之类的开源框架以及诸如Google Dataflow之类的云框架的增多,创建实时数据处理作业变得非常容易。这些API定义明确,并且诸如Map-Reduce之类的标准概念在所有框架中都遵循几乎相似的语义。 但是,直到今天,实时数据处理领域的开发人员都在为该领域的某些特性而苦苦挣扎。因此,他们在不知不觉中创建了一条路径,该路径导致了应用程序中相当常见的错误。 让我们看一下在设计实时应用程序时可能需要克服的一些陷阱。
156 0
实时流式计算系统中的几个陷阱
|
存储 数据采集 SQL
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(二)
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)
391 0
|
SQL 数据可视化 大数据
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(四)
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)
858 0
|
存储 SQL 数据采集
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(三)
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)
600 0
|
存储 消息中间件 SQL
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(五)
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)
356 0
|
存储 数据采集 Oracle
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)(一)
数仓建设保姆级教程,离线和实时一网打尽(理论+实战)
393 0
|
消息中间件 SQL 运维
如何设计实时数据平台(技术篇)
本文从技术角度入手,介绍RTDP的技术选型和相关组件,探讨适用不同应用场景的相关模式。
|
分布式计算 算法 大数据
实时数据处理框架调研
产品 模型 API 保证次数 容错机制 状态管理 延时 吞吐量 成熟度 Storm Native Compositional At least once Record ACKs Not built-in < 1s Low High Trident Micro-batching Compositi.
3481 0