前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实时流式计算系统中的几个陷阱

实时流式计算系统中的几个陷阱

作者头像
大数据流动
发布于 2020-05-19 16:24:13
发布于 2020-05-19 16:24:13
1.5K00
代码可运行
举报
文章被收录于专栏:实时计算实时计算
运行总次数:0
代码可运行

随着诸如Apache Flink,Apache Spark,Apache Storm之类的开源框架以及诸如Google Dataflow之类的云框架的增多,创建实时数据处理作业变得非常容易。这些API定义明确,并且诸如Map-Reduce之类的标准概念在所有框架中都遵循几乎相似的语义。

但是,直到今天,实时数据处理领域的开发人员都在为该领域的某些特性而苦苦挣扎。因此,他们在不知不觉中创建了一条路径,该路径导致了应用程序中相当常见的错误。

让我们看一下在设计实时应用程序时可能需要克服的一些陷阱。

活动时间

源生成数据的时间戳称为“ 事件时间”,而应用程序处理数据的时间戳称为“ 处理时间”。在实时数据流应用程序中,最常见的陷阱是无法区分这些时间戳。

让我们详细说明一下。

由于诸如代理中的GC较高或太多数据导致背压之类的多个问题,数据队列易出现延迟。我将事件表示为(E,P),其中E是事件时间戳(HH:MM:SS格式),P是处理时间戳。在理想世界中,E == P,但这在任何地方都不会发生。

假设我们收到以下数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'05:00:00''05:00:02'),('05:00:01''05:00:03'),('05:00:01''05:00: 03'),('05:00:01''05:00:05'),
('05:00:02''05:00:05'),('05:00:02'' 05:00:05'

现在,我们假设有一个程序可以计算每秒接收到的事件数。根据事件时间,程序返回

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[05:00:0005:00:01= 1 
[05:00:0105:00:02= 3 
[05:00:0205:00:03= 2

但是,基于处理时间,输出为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[5时○○分00秒,50001秒)= 0 
[50001秒,50002秒)= 0 
[50002秒,50003秒)= 1 
[05:000305:00:04= 2 
[05:00:0405:00:05= 0 
[05:00:0505:00:06= 3

如您所见,这两个都是完全不同的结果。

数据流中异常的延迟

大多数实时数据应用程序使用来自分布式队列的数据,例如Apache Kafka,RabbitMQ,Pub / Sub等。队列中的数据由其他服务生成,例如消费者应用程序的点击流或数据库的日志。

问题队列容易受到延迟的影响。即使在几十毫秒内,生成的事件也可能到达您的工作中,或者在最坏的情况下可能会花费一个多小时(极高的背压)。由于以下原因,数据可能会延迟:

  • kafka上的高负载
  • 生产者在其服务器中缓冲数据
  • 由于应用程序中的背压,消耗速度慢

假设数据将永远不会延迟是一个巨大陷阱。开发人员应始终具有测量数据延迟的工具。例如,在Kafka,您应该检查偏移量滞后。

您还应该监视作业中的背压以及延迟(即事件时间与处理时间之间的差)。没有这些将导致数据意外丢失,例如10分钟。时间窗口似乎没有数据,并且窗口显示10分钟。之后,其期望值将是预期值的两倍。

Joins

在批处理数据处理系统中,将两个数据集合并起来比较简单。在流处理世界中,情况变得有些麻烦。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//数据集的格式为(时间戳,键,值)
//数据组1 (05:00: 
00A,值A),
(05:00: 01B,值B),(05:0004C,值C),(05:00:04D,值D//数据流2 05:00:00A,值A'),(05:00:02,B,值B' ),
(05:00:00C,值C')

现在,我们将两个数据流都放在它们的Key上。为简单起见,我们将进行内部联接。

Key A — 值A和值A'都同时到达。因此,我们可以轻松地将它们组合为一个函数并发出输出

Key B — 值B比值B`早1秒。因此,我们需要在数据流1上等待至少1秒钟,才能使连接正常工作。因此,您需要考虑以下内容-

  • 那一秒钟的数据将存储在哪里?
  • 如果1秒不是固定的延迟,并且在最坏的情况下不规则地增加到10分钟怎么办?

Key C —值C比值C'晚4秒钟到达。这与以前相同,但是现在您在数据流1和2中都具有不规则的延迟,并且没有固定的模式将其值设为1。

Key D —值D到达,但是没有观察到值D'。考虑以下-

  • 您要等多久才能获得价值D`?
  • 如果值D`可以从至少5秒到接近1小时的任何时间出现,该怎么办?
  • 如果这是一个外部联接,而您必须决定何时单独发出值D,该怎么办?
  • 如果在前一种情况下,在发出值D 1分钟后到达值D`,该怎么办?

以上所有问题的答案将取决于您的用例。重要的是要考虑所有这些问题,而不是忽略流系统的复杂性。

一定要注意 不要回避这些问题

配置

在标准微服务中,配置位于作业内部或数据库中。您可以在数据流应用程序中执行相同的操作。但是,在继续使用此方法之前,您需要考虑以下事项。

您将多久访问一次配置?

如果需要为每个事件访问配置,并且事件数量很多(超过一百万RPM),那么您也可以尝试其他方法。一种是将配置存储在作业状态中。这可以使用状态处理在Flink和Spark中完成。可以使用文件读取器或Kafka中的其他流以状态填充该配置。

在流处理世界中,针对每个事件进行数据库调用可能会使您的应用程序变慢并导致背压。选择是使用快速数据库,还是通过在应用程序内部存储状态来消除网络调用。

您的配置有多大?

如果配置很大,则仅当配置可以拆分到多个服务器时才应使用应用程序内状态,例如,一个配置为每个用户保留一些阈值。可以基于用户ID密钥将这样的配置拆分到多台计算机上。这有助于减少每台服务器的存储量。

如果无法在节点之间拆分配置,请首选数据库。否则,所有数据将需要路由到包含配置的单个服务器,然后再次重新分发。唯一包含配置的服务器充当该方案的瓶颈。

设计实时数据流应用程序似乎很容易,但是开发人员会犯很多上述错误,特别是如果它们来自微服务领域。

重要的部分是了解数据流的基础知识以及如何处理单个流,然后转到处理多个联接,实时配置更新等的复杂应用程序。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 Flink 的实时推荐系统:Python 实现与工业级调优
嘿,各位技术小伙伴们!在如今这个信息爆炸的时代,你是不是常常感觉自己像个在知识海洋里奋力划桨的水手,却总被海量的数据浪潮拍打得晕头转向?而实时推荐系统,就像是我们在这片数据海洋里的超级导航仪,能精准地为用户指引他们感兴趣的信息宝藏。今天呢,咱们就来深入探索一下基于 Flink 的实时推荐系统,用 Python 来实现它,并且还要进行超厉害的工业级调优哦!
小白的大数据之旅
2025/05/17
1100
基于 Flink 的实时推荐系统:Python 实现与工业级调优
Flink 中极其重要的 Time 与 Window 详细解析(深度好文,建议收藏)
流式:就是数据源源不断的流进来,也就是数据没有边界,但是我们计算的时候必须在一个有边界的范围内进行,所以这里面就有一个问题,边界怎么确定? 无非就两种方式,根据时间段或者数据量进行确定,根据时间段就是每隔多长时间就划分一个边界,根据数据量就是每来多少条数据划分一个边界,Flink 中就是这么划分边界的,本文会详细讲解。
五分钟学大数据
2021/01/25
1.5K0
Flink 中极其重要的 Time 与 Window 详细解析(深度好文,建议收藏)
11 Confluent_Kafka权威指南 第十一章:流计算
kafka 传统上被视为一个强大的消息总线,能够处理事件流,但是不具备对数据的处理和转换能力。kafka可靠的流处理能力,使其成为流处理系统的完美数据源,Apache Storm,Apache Spark streams,Apache Flink,Apache samza 的流处理系统都是基于kafka构建的,而kafka通常是它们唯一可靠的数据源。 行业分析师有时候声称,所有这些流处理系统就像已存在了近20年的复杂事件处理系统一样。我们认为流处理变得更加流行是因为它是在kafka之后创建的,因此可以使用kafka做为一个可靠的事件流处理源。日益流行的apache kafka,首先做为一个简单的消息总线,后来做为一个数据集成系统,许多公司都有一个系统包含许多有趣的流数据,存储了大量的具有时间和具有时许性的等待流处理框架处理的数据。换句话说,在数据库发明之前,数据处理明显更加困难,流处理由于缺乏流处理平台而受到阻碍。 从版本0.10.0开始,kafka不仅仅为每个流行的流处理框架提供了更可靠的数据来源。现在kafka包含了一个强大的流处理数据库作为其客户端集合的一部分。这允许开发者在自己的应用程序中消费,处理和生成事件,而不以来于外部处理框架。 在本章开始,我们将解释流处理的含义,因为这个术语经常被误解,然后讨论流处理的一些基本概念和所有流处理系统所共有的设计模式。然后我们将深入讨论Apache kafka的流处理库,它的目标和架构。我们将给出一个如何使用kafka流计算股票价格移动平均值的小例子。然后我们将讨论其他好的流处理的例子,并通过提供一些标准来结束本章。当你选择在apache中使用哪个流处理框架时可以根据这些标准进行权衡。本章简要介绍流处理,不会涉及kafka中流的每一个特性。也不会尝试讨论和比较现有的每一个流处理框架,这些主题值得写成整本书,或者几本书。
冬天里的懒猫
2020/08/12
1.7K0
11 Confluent_Kafka权威指南 第十一章:流计算
Flink核心概念之时间流式处理
含有时间的流处理是有状态流处理的扩展,其中时间在计算中起一定作用。 除其他外,当您进行时间序列分析、基于特定时间段(通常称为窗口)进行聚合时,或者在事件发生的时间很重要的情况下进行事件处理时,就会出现这种情况。
从大数据到人工智能
2022/02/01
9950
Flink核心概念之时间流式处理
五万字 | Flink知识体系保姆级总结
一、Flink简介 二、Flink 部署及启动 三、Flink 运行架构 四、Flink 算子大全 五、流处理中的 Time 与 Window 六、Flink 状态管理 七、Flink 容错 八、Flink SQL 九、Flink CEP 十、Flink CDC 十一、基于 Flink 构建全场景实时数仓 十二、Flink 大厂面试题
五分钟学大数据
2021/09/22
4.6K0
(中)史上最全干货!Flink SQL 成神之路(全文 18 万字、138 个案例、42 张图)
CREATE 语句用于向当前或指定的 Catalog 中注册库、表、视图或函数。注册后的库、表、视图和函数可以在 SQL 查询中使用。
公众号:大数据羊说
2022/04/04
6.3K0
(中)史上最全干货!Flink SQL 成神之路(全文 18 万字、138 个案例、42 张图)
Flink双流及多流Join 、IntervalJoin、coGroupJoin的区别与生产使用
1.Flink 三种Join的代码测试 1.1 数据源 1.2 join 1.3 intervalJoin 1.3.1 intervalJoin API用法 1.3.2 intervalJoin SQL用法 1.4 coGroup
大数据真好玩
2022/12/05
3.2K0
Flink双流及多流Join 、IntervalJoin、coGroupJoin的区别与生产使用
【天衍系列 03】深入理解Flink的Watermark:实时流处理的时间概念与乱序处理
Watermark 是用于处理事件时间的一种机制,用于表示事件时间流的进展。在流处理中,由于事件到达的顺序和延迟,系统需要一种机制来衡量事件时间的进展,以便正确触发窗口操作等。Watermark 就是用来标记事件时间的进展情况的一种特殊数据元素。
夏之以寒
2024/03/04
1.5K0
快手实时数仓保障体系研发实践
摘要:本文整理自快手实时计算数据团队技术专家李天朔在 Flink Forward Asia 2021 实时数仓专场的演讲。主要内容包括:
从大数据到人工智能
2022/06/27
7720
快手实时数仓保障体系研发实践
Flink 如何现实新的流处理应用第一部分:事件时间与无序处理
流数据处理正处于蓬勃发展中,可以提供更实时的数据以实现更好的数据洞察,同时从数据中进行分析的流程更加简化。在现实世界中数据生产是一个连续不断的过程(例如,Web服务器日志,移动应用程序中的用户活跃,数据库事务或者传感器读取的数据)。正如其他人所指出的,到目前为止,大部分数据架构都是建立在数据是有限的、静态的这样的基本假设之上。为了缩减连续数据生产和旧”批处理”系统局限性之间的这一根本差距,引入了复杂而脆弱(fragile)的端到端管道。现代流处理技术通过以现实世界事件产生的形式对数据进行建模和处理,从而减轻了对复杂解决方案的依赖。
smartsi
2022/01/18
9680
Flink 如何现实新的流处理应用第一部分:事件时间与无序处理
Uber 如何为近实时特性构建可伸缩流管道?
Uber 致力于为全球客户提供可靠的服务。要达到这个目标,我们很大程度上依靠机器学习来作出明智的决定,如预测和增益。所以,用来产生机器学习数据和特征的实时流管道已经越来越受到重视。
深度学习与Python
2021/10/13
1.9K0
穿梭时空的实时计算框架——Flink对时间的处理
Flink对于流处理架构的意义十分重要,Kafka让消息具有了持久化的能力,而处理数据,甚至穿越时间的能力都要靠Flink来完成。
用户6070864
2019/09/04
8100
穿梭时空的实时计算框架——Flink对时间的处理
流媒体与实时计算,Netflix公司Druid应用实践
Netflix(Nasdaq NFLX),也就是网飞公司,成立于1997年,是一家在线影片[租赁]提供商,主要提供Netflix超大数量的[DVD]并免费递送,总部位于美国加利福尼亚州洛斯盖图。1999年开始订阅服务。2009年,该公司可提供多达10万部DVD电影,并有1千万的订户。2007年2月25日,Netflix宣布已经售出第10亿份DVD。
用户6070864
2020/05/18
9980
流媒体与实时计算,Netflix公司Druid应用实践
20000字详解大厂实时数仓建设(好文收藏)
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/04
6470
Flink核心概念:系统架构、时间处理、状态与检查点
上图的Flink示例程序对一个数据流做简单处理,整个过程包括了输入(Source)、转换(Transformation)和输出(Sink)。程序由多个DataStream API组成,这些API,又被称为算子 (Operator),共同组成了逻辑视角。在实际执行过程中,逻辑视角会被计算引擎翻译成可并行的物理视角。
PP鲁
2019/12/25
2.3K0
数据中心互联光网络之数据实时计算
本⽂主要针对波分运营管理系统展开介绍,即波分事件中⼼主要⽬的与技术⼿段浅谈。⽽开放光系统运营关键核⼼就是事件(event),运营事件的⽬标是⼀个事件解决⽹络的⼀个具体的问题。事件中⼼则是将⽹络所经历的所有事件准确的记录并汇集在⼀起。事件中⼼的每个事件需要准确描述⼀个具体的问题,并描述该问题带来的影响。所以我们研发了波分数据处理平台,其包含对性能数据标准定义、采集、数据实时计算功能。
MOSS-DZ
2023/05/12
4380
数据中心互联光网络之数据实时计算
实时数据系统设计:Kafka、Flink和Druid
对于使用批处理工作流的数据团队来说,要满足当今的实时需求并不容易。为什么呢?因为批处理工作流,从数据传递和处理到分析,涉及很多等待。
JavaEdge
2023/12/18
9180
实时数据系统设计:Kafka、Flink和Druid
Flink 使用Flink进行高吞吐,低延迟和Exactly-Once语义流处理
在本文中,我们将深入探讨Flink新颖的检查点机制是如何工作的,以及它是如何取代旧架构以实现流容错和恢复。我们在各种类型的流处理应用程序上对Flink性能进行测试,并通过在Apache Storm(一种广泛使用的低延迟流处理器)上运行相同的实验来进行对比。
smartsi
2019/08/07
6.1K0
Flink 使用Flink进行高吞吐,低延迟和Exactly-Once语义流处理
[白话解析] Flink的Watermark机制
对于Flink来说,Watermark是个很难绕过去的概念。本文将从整体的思路上来说,运用感性直觉的思考来帮大家梳理Watermark概念。
罗西的思考
2020/09/07
5.7K1
Flink面试题汇总
Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。并且 Flink 提供了数据分布、容错机制以及资源管理等核心功能。Flink提供了诸多高抽象层的API以便用户编写分布式任务:
xiangzhihong
2023/02/01
1.8K0
推荐阅读
相关推荐
基于 Flink 的实时推荐系统:Python 实现与工业级调优
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验