本文介绍数据加工(新版)的常见问题。
任务管理与 API 报错
作业显示运行中,为什么调用UpdateETL接口报错?
错误信息
SDKError: StatusCode: 400 Code: ParameterInvalid Message: Previous operation has not finished, status is RESTARTING{"httpCode":400,"requestId":"6867****************96ED","statusCode":400}
错误现象
在某一时刻(T1时刻)通过SDK调用UpdateETL接口进行更新操作,操作返回失败。随后查看控制台(T2时刻),发现作业状态显示为运行中。
调用 UpdateETL 时(T1 时刻),作业正处于重启过程中,无法接受更新操作。随后查看控制台时(T2 时刻),重启已完成,因此状态显示为运行中。这是 SDK 调用与控制台查看之间的时间差导致的正常现象。建议等待作业状态完全稳定后再执行更新操作。
数据加工使用 SDK 报错:ParameterInvalid fromTime should be >=0 and less than current time
数据加工的 fromTime 和 toTime 不允许修改,这两个时间参数一旦设置后就固定了,不能通过 API 或 SDK 进行修改。
调用 UpdateETL 接口报错The ETL job with lang=SPL can only be updated by restarting
旧版 SDK 不支持使用 UpdateETL 接口更新新版数据加工任务,需要更换为新版 OpenAPI。具体操作,请参见CreateETL。
数据加工任务不消费数据可能是什么原因?
可能存在以下原因:
Token 过期。无需关注,系统会自动刷新 Token。
数据量较大,导致数据堆积延迟。需要分裂 Shard 来提高处理并发度。关于分裂 Shard 的操作,请参见管理 Shard。
数据一致性与完整性
数据加工传到另一个账号的 SLS 有一次性语义保证吗?怎样保证数据一致性?
数据加工不支持 exactly-once 写入,但支持 at-least-once 写入。
目标 Logstore 缺少中间某一天的数据,可能是什么原因?
请检查目标 Logstore 的数据保存时间(TTL),确认数据的 __receive_time__ 是否超出了数据保存时间。如果数据因 TTL 过期被自动删除,会导致中间某一天的数据缺失。可以通过调整数据保存时间来解决。
加工后的数据量比源 Logstore 少很多,可能是什么原因?
通常是索引开启时间晚于加工任务创建时间。解决方案是重建索引,重建索引的时间范围选择创建加工任务之前到创建索引之后。需要注意的是,重建索引仅支持 30 天之内的数据,该时间范围指的是接收时间(__receive_time__)。
性能与 Shard 管理
新版和旧版数据加工的单 Shard 性能分别是多少?
新版数据加工单 Shard 性能在 30 MB/s 到 60 MB/s 之间;旧版数据加工 Shard 性能一般在 2 MB/s,复杂加工情况下约 1 MB/s。
配置了自动分裂但没有生效是什么原因?
自动分裂 Shard 功能针对的是写入 Logstore 的场景。数据加工对源 Logstore 是读取操作,读取不会触发自动分裂。需要在 Logstore 的修改页面手动完成 Shard 分裂操作。
跨地域传输与网络
SLS 数据跨地域传输有哪些方式?如何选择?
如果不需要聚合操作,推荐使用数据加工进行跨地域传输;如果需要聚合操作,推荐使用定时 SQL。数据加工适合行级别的数据同步和转换,定时 SQL 适合需要跨日志聚合计算的场景。
公网跨地域数据传输出现Connection aborted或Connection reset by peer报错
由于通过公网跨地域传输数据时网络质量无法保障,可能出现报错及数据加工处理延迟。建议开启传输加速域名,可以有效提升跨地域数据传输的网络质量和稳定性。
公有云支持加工到合规云吗?
公有云支持加工到合规云。
如果不跨域,可以走 Share 通道也可以走公网,建议优先走 Share 通道。例如乌兰察布公有云到乌兰察布行业云,目标地域配置为
cn-wulanchabu-gic-1-share.log.aliyuncs.com。如果跨域,则走公网。例如广州到乌兰察布通用行业云,目标地域配置为
cn-wulanchabu-gic-1.log.aliyuncs.com。
数据加工可以从公有云加工到弹内环境吗?
不可以从公有云加工到弹内环境,因为存在安全风险。但可以从弹内加工到公有云。
SPL 与报错诊断
为什么数据加工必须选择数据集?数据集是什么?
数据集是 SPL 的语言特性,默认名称为 __UNNAMED__,表示正在处理的一组数据。数据集可能是原始日志,也可能是经过筛选、解析后的结果。如果只是简单处理(如过滤和字段扩展),不显式定义数据集也没有问题。但如果需要分发到多个目标 Logstore(例如将错误日志写入专用日志库),就必须使用命名数据集,否则无法指定不同数据集的目标 Logstore。
调试 SPL 时报错Test logs invalid是什么原因?
调试 SPL 时,需要确保测试数据是 JSON 数组格式,例如 [{"A":"xxx"},{"B":"xxx"},...]。
数据加工仪表盘报错key (_etl_:connector_meta.connector) is not config as key value config是什么原因?
该报错是因为加工任务运行日志的索引配置错误。请提供运行日志所在的 Project,联系 CloudLens 技术支持进行检查。