SLS数据处理实践:加工延迟篇-阿里云开发者社区

开发者社区> 唐恺> 正文

SLS数据处理实践:加工延迟篇

简介: 在日志服务,数据加工功能(功能介绍)用于完成对Logstore数据的预处理,为后续的分析阶段准备数据。本文主要介绍数据加工实践中可能遇到的延迟问题,帮助大家理清延迟现象背后的原因,以及如何去监控、解决延迟问题。
+关注继续查看

在日志服务,数据加工功能(功能介绍)用于完成对Logstore数据的预处理,为后续的分析阶段准备数据。本文主要介绍数据加工实践中可能遇到的延迟问题,帮助大家理清延迟现象背后的原因,以及如何去监控、解决延迟问题。image.png

什么是加工延迟

Logstore

数据加工作业是衔接源Logstore到目标Logstore的一个管道,在这个管道上完成富化、预处理、清洗等工作。
日志服务的Logstore首先是一个流式数据的存储,在Logstore下有多个Shard(Shard可以类比为Kafka的Partition概念)。每个Shard即是一个数据分片,像是一个无限大队列(基于落盘文件),它是FIFO的:

  • 当生产者向Logstore写入数据的时候,数据默认会随机选择一个Shard做存储(追加到Shard的末尾,每个数据包在Shard上有一个位置,定义为Cursor)。
  • 在读Logstore的时候,消费者选定一个位置(Cursor)开始,按从头到尾的方向顺序读出数据。

时间定义

在定义加工延迟之前,再来看几个时间概念:

  • 数据时间(EventTime):在数据上可以选择一对Key/Value(例如是自定义的timestamp字段)存储业务上的时间;一般建议在日志服务的保留字段__time__上设置EventTime,在使用SLS的索引功能做业务时间筛选时会更加方便。(参考日志服务数据模型

image.png

  • 数据接收时间(ServerReceiveTime):生产者写出的数据被服务端接收的系统时间,随着数据的顺序写入,ServerReceiveTime总是在递增。
  • 数据消费时间(ProcessingTime):消费者读取这个数据做处理的系统时间。

ProcessingTime - ServerReceiveTime定义为加工延迟。在流计算的理论情况下,两者差值逼近0。在SLS实际的加工延迟可以做到1秒内,如果超出了一定阈值,即是加工延迟。

怎样发现延迟

确认目标写入情况

当加工发生延迟的时候,直观的情况是目标Logstore数据缺失。

  • 如果目标Logstore建立了索引,可以选择一个更大范围的时间窗口,隔几秒种查询一次,看日志条数据是否有变化。如果日志集中在之前的时间段且数据量有逐步增加,那比较大概率是发生了延迟(且加工在继续工作)。

image.png

  • 另一种情况,目标Logstore上没有索引,可以通过预览的方式,确认是否有新的数据在写入。重复查询几次,例如最近15分钟有数据写入且写入的数据EventTime比较老,也有可能是加工延迟的原因。

image.png
这两个方法,除了用于确认加工延迟以外,也推荐用来观察加工延迟的恢复进度、解决加工结果数据找不到的情况。

查看指标

数据加工默认包含一个诊断仪表盘(仪表盘介绍),登录SLS控制台,选择对应的加工作业进行查看。
下图就是一个延迟严重的情况:
image.png
而理想情况下加工延迟是:
image.png

配置告警

如果需要时刻关注加工延迟,可以配置一个告警,当延迟稳定发生时,SLS把告警推送钉钉群或者短信。
image.png
如何对加工配置告警,可以参考加工告警配置指南操作。
在告警通知策略上,设置连续N次触发再做消息推送,可以过滤偶尔抖动的情况。
image.png

加工全量数据导致的延迟

这是一种预期内的延迟现象,主要发生在作业刚创建时,有两种场景:

  • 保存加工作业时,选择从历史上一个时间点(按ServerReceiveTime是计算)开始处理数据

image.png

  • 保存加工作业时,选择处理Logstore中的全量数据

image.png
加工耗时取决于时间段内的数据规模,加工作业需要从旧数据开始直到追赶进度完成。在加工并发足够的情况下,会发现加工延迟有变小的趋势。
如果观察到加工追赶得比较慢,推荐对任务按照时间段做切分来实现加速。例如,要处理9/1到9/10的历史日志,则按照天将任务切分成9个,分治处理:
Job_1: [9/1, 9/2)
Job_2: [9/2, 9/3)
....
Job_9: [9/9, 9/10]

加工逻辑复杂导致的延迟

从Logstore的写能力来看,SLS对一个Shard提供5MB/s(原始数据)以上的写入能力,在日志服务集群资源允许时可能支持10MB/s或者更高的写入吞吐。
当真实的大量数据写入源Logstore的Shard后,加工的业务复杂度是不确定的,因此可能发生瓶颈:加工的速率跟不上数据写入的速率。
一个思路是降低加工的复杂度,从逻辑层面优化DSL代码:

  • 使用了e_regex,查看正则表达式的复杂度。对正则做优化往往收到不错的效果,尽量让匹配的边界明确化,可以参考如何优化正则表达式
  • 提前对不需要的数据做过滤:例如对e_drop相关代码做前置,在需要丢弃的数据上可以避免无意义的计算。
  • 对于一连串复杂操作,通过使用条件判断语句(例如e_if、e_switch等)设置分支条件。
  • 使用了e_split等函数对JSON数组进行分裂写出,1份输入对应10倍或更多的写出。
  • 其它情况,持续更新中。。。

如果在加工逻辑层面难以做优化,更直接的方式是按照下一节处理(对源Logstore做Shard分裂),加工会根据Shard数目增加并发度。

源Shard数不足导致的延迟

伴随着加工作业的在线上运行,业务流量变化也可能带来源Logstore的流量增长。对源Logstore做Shard分裂(Shard操作说明),可以让每个Shard上的数据量少一些,并有机会得到更多的加工并发。

分裂Shard的限制

分裂Shard不会对历史上已写入的数据做重分布,也就是说老的数据还在旧Shard上,只有新的数据会落到更多的Shard上。
因此,在分裂Shard后,观察加工延迟指标,可能会发现部分Shard的加工延迟高,部分低的情况:
image.png
较为可能的原因是老的Shard历史上积攒数据较多,追上进度需要时间,而新的Shard上的数据可以立刻被处理,从Logstore属性查看Shard创建时间可以确认这一点:
image.png

关注Shard的状态

源Logstore上,只有readwrite状态的Shard数目对于加工并发有意义,在执行操作时可以选择将Shard一次性分裂为N个。绝大部分情况下不用关注Shard上的BeginKey/EndKey,因为数据默认是随机Shard写入的。
image.png

关于自动分裂

Logstore设置的自动分裂属性,仅对数据写入生效,请仔细阅读该开关的说明。
从加工角度来说,加工延迟不会触发自动分裂。
image.png

写出目标受阻导致的延迟

SLS对Logstore写入有速率限制,例如有每秒钟要写入10万条日志(每条512 Bytes),则需要规划5~10个Shard。
当目标Logstore readwrite状态Shard数目不足时,加工有类似WriteQuotaExceed或QuotaExceed字样的报错,可以在诊断仪表盘中看到。
image.png
处理方法是:对目标Logstore做Shard分裂。解决写出瓶颈后,加工作业停止阻塞,自动恢复数据处理。

总结

参考加工性能指南,建议在部署加工作业之前,从三个层面进行规划:

  • 源Logstore,根据数据量调整Shard数目(readwrite状态),满足一定的加工并发度。
  • 加工DSL代码逻辑优化,例如对正则的优化、合理做条件剪枝、数据过滤尽量前置。
  • 目标Logstore设置足够的Shard数目(readwrite状态),避免加工写出数据受阻。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
基于 MaxCompute 的实时数据处理实践
MaxCompute 通过流式数据高性能写入和秒级别查询能力(查询加速),提供EB级云原生数仓近实时分析能力;高效的实现对变化中的数据进行快速分析及决策辅助。当前Demo基于近实时交互式BI分析/决策辅助场景,实现指标卡近实时BI分析、近实时市场监测、近实时趋势分析、近实时销量拆分功能。
537 0
【新发布】SLS数据加工增值内容服务
【数据加工】是一个可托管、高可用、可扩展的数据处理服务,广泛适用于数据的规整、富化、分发、汇总、重建索引等场景。这里详细介绍如何通过数据加工实现数据的分发与汇总,从而实现统一存储管理或分类精细化查询分析,以及存储成本优化等目的。
153 0
DyeMansion为SLS、MJF 3D打印部件提供RAL光谱着色处理
DyeMansion表示可以为SLS ,MJF 3D打印部件提供RAL光谱着色处理。 RAL彩色3D打印样本 PowerShot表面处理 PolyShot Surfacing(PSS)是DyeMansion专有的喷砂工艺之一。
1351 0
地理数据可视化探索——SLS的地图演变之路
伴随着阿里云日志服务(SLS)面向的客户群体不断变化,接入的日志数据种类日益增多,地理类数据成为了日志数据分析中越来越常见的一类数据形式。数据可视化应用的火爆发展,地理数据的可视化也萌发出了大量的需求,大规模地理数据可视化分析,从业务上来看一直是个难点,地理数据的存储,计算,分析,可视化,产品应用等各个方面都需要综合起来考虑。
1015 0
MySQL海量数据处理及优化
什么是mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。
1156 0
数据天生就是流式的
现在依然很多人使用Azkaban/Oozie等工具衔接各个系统,通过外力让数据进行流转。而随着流式计算慢慢成熟与稳定,数据必然如河水一般,天生就是流式的。
1776 0
Ionic 中控件点击延迟的处理
原文发表于我的技术博客 本文分享了在 Ionic 中如何处理控件点击延迟的问题。原文发表于我的技术博客 1. 问题描述 在 Ionic 中,当在 iOS 环境下运行元素的点击事件时,你会发现点击响应事件会出现延迟的情况,此情况会造成用户的操作疑惑。
858 0
SLS【数据加工】调试手册
SLS 数据加工提供了预览功能,以便用户可以在发布运行之前,对 DSL 脚本进行调试,保证 DSL 的正确性和完整性。数据加工提供了2种预览方式,快速预览和高级预览。
309 0
+关注
唐恺
阿里云 SLS 研发工程师
22
文章
7
问答
来源圈子
更多
阿里云存储基于飞天盘古2.0分布式存储系统,产品包括对象存储OSS、块存储Block Storage、共享文件存储NAS、表格存储、日志存储与分析、归档存储及混合云存储等,充分满足用户数据存储和迁移上云需求,连续三年跻身全球云存储魔力象限四强。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载