【观察】常用的流式框架(一)-- Storm与Samza

简介:
     相较数据处理的两大阵营,批量处理(Batch)和流式处理(Stream):批量处理比较经济,且只对全量数据进行处理;但数据延时较大,因为只有跑批之后数据才提供给应用系统。

1

    流式处理延时小,但由于24小时运作,因此不许有宕机时间,并且由于只处理增量数据,所以难免会遗漏部分数据的处理。

2

    在两相权宜之下,演化出了以下两种混合架构:
  1. Lambda架构:有流式处理以提供低延时的数据访问,同时定期跑批以覆盖流式处理中可能带来的不完整的数据。但这会造成企业中有两套代码库。
    3
  2. Kappa架构:在原有流式处理的管道中加入数据保留(Retention)以减小数据未处理的风险,但这就约束了使用者只能在处理中加入增量算法,不然无法识别新旧数据。
    4

        流式处理可以集成一些简单的算法,他们体量很小在完成算法的同时又不会影响到数据的实时性,例如:
  3. 数据的过滤与转换;
  4. 数据的分类;
  5. 简单的数学计算(求和、计数、求平均等)及逻辑运算
  6. 滑动窗口大小设定(比如只对过去5分钟的数据做运算等)
    5

        Twitter有业界知名的流式处理框架(从Yahoo学来的),它需要定期汇报给客户广告投放的效果,怎么做呢?首先从Kafka中提取广告跟踪的数据,然后做初步筛选,然后提取相关字段(比如实际播放时长、浏览量等),然后按照广告的投放活动进行分组,最后定义窗口时长进行浏览量的统计。

    6

        下面我们来看下流式处理中的各代表框架。

    7

        Storm是第一个被广泛采纳的流式框架,它在2010年由BackType公司开发(目前这家公司已被Twitter收购),2011年开源,2014年成为Apache顶级项目。在Storm中提出了“spouts”和“bolts”的想法,前者接收流数据(比如Kafka)后稍作处理生成全新的流,而后者以流作为输入,并生成流作为输出。Bolts只需订阅它们需要处理的流,并指明作为输入的流应该如何划分。它是一个由spouts和bolts组成的网络。

    8

        它的部署也非常简单,设计好架构之后,提交给Nimbus服务器,再由Zookeeper将架构部署到组织内的节点,每一个Storm节点中有多个Worker进程(Worker进程中运行了spouts和bolts的任务)及一个监管进程(Supervisor)。当有Storm节点宕机时,Nimbus还会重新部署workers和工作流。

    9

        对于组织中一些状态数据(例如登陆账号),Storm将其存放在内存中或放到Redis数据库里,同时会在关键路径上同步这些状态数据。当然如果这些状态数据过大,会影响到流式框架的传输实时性。

    10

        当然如果真的有太多Tuples(storm中使用的最基本单元、数据模型和元组)要处理导致实时数据流拥堵,Storm也会有相应的反压机制,它对bolt的入站缓存做监控,当超过“高水位”时做限流;低于“低水位”时做加速。
        在2012年,Storm推出了新的扩展组件Trident,用来提供高级API以满足更多数据的接入,并将流式框架减速为微批量(Micro-batch),提高了数据流的时序性和吞吐量。

    11

        从上图中我们可以看到,Trident将Spout到最终服务间的数据流切成了三个微批量(Trident在英语中就是三叉戟的意思)。
    
        领英公司(Linkedin)在开发Kafka的时候同时开发了Samza,Samza是在Kafka上层的实时数据流,是上文提到的Kappa架构(Kafka能保留一定量的历史数据,因此绝大多数的Kappa会基于Kafka)。2013年开源,2015年成为Apache顶级项目。他的特点是单线程作业(避免数据的时序错乱和数据对点),只保留本地状态(便于分布式拓扑与灾难恢复),只使用本地流处理器(更低的延时)。除领英外,我们熟悉的Uber、Netflix也是Samza的用户。
        在架构设计上,它的作业(Job)类似于Storm中的bolt,但是因为有Kafka帮忙缓存数据,在Kafka的Partition内部完成数据排列,因此Samza完全不用担心反压问题和时序问题。分布式的作业还能保证数据流的高可用。

    12

        在处理状态数据时有两种办法,第一种是异地存放,作业会将状态数据(例如移动窗口)存放在一个KV存储中(例如Redis),但这样一个共享的KV存储的读写会非常频繁;另一种本地存放,即将状态变化的日志作为数据流的一部分写到Kafka,然后根据日志数据更新状态变化。我们一般倾向于第二种,因为没有反压,查询便捷并且恢复简单。

    13

        既然说到恢复,对于Samza任务的恢复,只需要重播Kafka中的变更日志再比较其余任务节点就能将故障节点状态恢复到最后运行正常的时刻。

    14

        希望今天的讲述不太枯燥,下一堂课我们介绍流式框架的另外半壁江山:Spark和Flink。
相关文章
|
10月前
|
自然语言处理 Kubernetes 异构计算
推理降本与提升资源效率的实践
本课程从业务角度探讨大模型推理部署及资源利用率提升。首先分析大模型与GPU发展趋势,包括模型开源、规模增长及多模态能力增强;其次介绍高效部署大模型推理业务的步骤,涵盖业务场景选择、架构优化及显存规划;接着讲解如何通过DeepCPU-LLM框架和DeepNCCL通讯库优化推理效率;最后探讨通过KuberGPU实现细粒度GPU资源管理,提升整体资源利用率,降低推理成本。
|
域名解析 网络协议 虚拟化
|
NoSQL 关系型数据库 MySQL
Redis私有云平台-Cachecloud安装和部署手册
Redis私有云平台-Cachecloud安装和部署手册
|
数据处理 Python
Python 高级技巧:深入解析读取 Excel 文件的多种方法
在数据分析中,从 Excel 文件读取数据是常见需求。本文介绍了使用 Python 的三个库:`pandas`、`openpyxl` 和 `xlrd` 来高效处理 Excel 文件的方法。`pandas` 提供了简洁的接口,而 `openpyxl` 和 `xlrd` 则针对不同版本的 Excel 文件格式提供了详细的数据读取和处理功能。此外,还介绍了如何处理复杂格式(如合并单元格)和进行性能优化(如分块读取)。通过这些技巧,可以轻松应对各种 Excel 数据处理任务。
649 16
|
监控 项目管理
软件工程IT项目管理复习之 十一:项目风险管理
软件工程IT项目管理复习之 十一:项目风险管理
808 0
|
机器学习/深度学习 人工智能 自然语言处理
OpenAI Sora是什么?如何使用?新手小白必看
在AI领域不断迈向创新的今天,OpenAI引领了一系列令人瞩目的技术进步。今天,我想向大家介绍一个名为Sora的全新产品——一个革命性的视频创作工具,旨在为内容创作者、艺术家和企业提供前所未有的便利和创作能力。
651 0
OpenAI Sora是什么?如何使用?新手小白必看
|
机器学习/深度学习 人工智能 算法
智能时代的伦理困境:人工智能决策的透明度与责任归属
当AI技术逐渐渗透到我们生活的每一个角落,它带来的便利和效率提升是显而易见的。然而,随之而来的伦理挑战也不容忽视。本文将探讨AI在做出决策时面临的透明度问题,以及由此引发的责任归属难题。通过分析AI系统的工作原理、决策过程及其对个人和社会可能产生的影响,我们将提出一系列针对当前AI伦理困境的解决方案和建议,旨在促进AI技术的健康发展同时保护人类社会的基本伦理原则。
1332 11
|
Python
Python:Pandas实现批量删除Excel中的sheet
Python:Pandas实现批量删除Excel中的sheet
459 0
|
消息中间件 分布式计算 Hadoop
利用Hadoop进行实时数据分析的挑战与解决方案
【8月更文第28天】随着大数据技术的快速发展,企业和组织面临着越来越复杂的实时数据处理需求。Hadoop 作为一种分布式存储和处理大数据的框架,虽然擅长于批处理任务,但在处理实时数据流时存在一定的局限性。为了克服这些限制,Hadoop 经常与其他实时处理框架(如 Apache Kafka 和 Apache Storm)结合使用。本文将探讨如何利用 Hadoop 结合 Kafka 和 Storm 实现近实时的数据处理,并提供相关的代码示例。
936 0
|
SQL 搜索推荐 Java
Hive中的UDF是什么?请解释其作用和使用方法。
Hive中的UDF是什么?请解释其作用和使用方法。
219 0