唐恺
2020-02-26
1306浏览量
在日志服务,数据加工功能(功能介绍)用于完成对Logstore数据的预处理,为后续的分析阶段准备数据。本文主要介绍数据加工实践中可能遇到的延迟问题,帮助大家理清延迟现象背后的原因,以及如何去监控、解决延迟问题。
数据加工作业是衔接源Logstore到目标Logstore的一个管道,在这个管道上完成富化、预处理、清洗等工作。
日志服务的Logstore首先是一个流式数据的存储,在Logstore下有多个Shard(Shard可以类比为Kafka的Partition概念)。每个Shard即是一个数据分片,像是一个无限大队列(基于落盘文件),它是FIFO的:
在定义加工延迟之前,再来看几个时间概念:
__time__
上设置EventTime,在使用SLS的索引功能做业务时间筛选时会更加方便。(参考日志服务数据模型)把ProcessingTime - ServerReceiveTime
定义为加工延迟。在流计算的理论情况下,两者差值逼近0。在SLS实际的加工延迟可以做到1秒内,如果超出了一定阈值,即是加工延迟。
当加工发生延迟的时候,直观的情况是目标Logstore数据缺失。
这两个方法,除了用于确认加工延迟以外,也推荐用来观察加工延迟的恢复进度、解决加工结果数据找不到的情况。
数据加工默认包含一个诊断仪表盘(仪表盘介绍),登录SLS控制台,选择对应的加工作业进行查看。
下图就是一个延迟严重的情况:
而理想情况下加工延迟是:
如果需要时刻关注加工延迟,可以配置一个告警,当延迟稳定发生时,SLS把告警推送钉钉群或者短信。
如何对加工配置告警,可以参考加工告警配置指南操作。
在告警通知策略上,设置连续N次触发再做消息推送,可以过滤偶尔抖动的情况。
这是一种预期内的延迟现象,主要发生在作业刚创建时,有两种场景:
加工耗时取决于时间段内的数据规模,加工作业需要从旧数据开始直到追赶进度完成。在加工并发足够的情况下,会发现加工延迟有变小的趋势。
如果观察到加工追赶得比较慢,推荐对任务按照时间段做切分来实现加速。例如,要处理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代码:
如果在加工逻辑层面难以做优化,更直接的方式是按照下一节处理(对源Logstore做Shard分裂),加工会根据Shard数目增加并发度。
伴随着加工作业的在线上运行,业务流量变化也可能带来源Logstore的流量增长。对源Logstore做Shard分裂(Shard操作说明),可以让每个Shard上的数据量少一些,并有机会得到更多的加工并发。
分裂Shard不会对历史上已写入的数据做重分布,也就是说老的数据还在旧Shard上,只有新的数据会落到更多的Shard上。
因此,在分裂Shard后,观察加工延迟指标,可能会发现部分Shard的加工延迟高,部分低的情况:
较为可能的原因是老的Shard历史上积攒数据较多,追上进度需要时间,而新的Shard上的数据可以立刻被处理,从Logstore属性查看Shard创建时间可以确认这一点:
源Logstore上,只有readwrite状态的Shard数目对于加工并发有意义,在执行操作时可以选择将Shard一次性分裂为N个。绝大部分情况下不用关注Shard上的BeginKey/EndKey,因为数据默认是随机Shard写入的。
Logstore设置的自动分裂属性,仅对数据写入生效,请仔细阅读该开关的说明。
从加工角度来说,加工延迟不会触发自动分裂。
SLS对Logstore写入有速率限制,例如有每秒钟要写入10万条日志(每条512 Bytes),则需要规划5~10个Shard。
当目标Logstore readwrite状态Shard数目不足时,加工有类似WriteQuotaExceed或QuotaExceed字样的报错,可以在诊断仪表盘中看到。
处理方法是:对目标Logstore做Shard分裂。解决写出瓶颈后,加工作业停止阻塞,自动恢复数据处理。
参考加工性能指南,建议在部署加工作业之前,从三个层面进行规划:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。