您可以使用作业调试功能模拟作业运行、检查输出结果,验证SELECT或INSERT业务逻辑的正确性,提升开发效率,降低数据质量风险。本文为您介绍如何进行作业调试。
背景信息
作业调试功能支持您在控制台本地验证作业逻辑的正确性,且不会将数据实际写入您生产的下游中(无论您使用什么样的结果表)。使用调试功能时,您可以使用上游的线上数据或指定调试数据。调试可以包含多个SELECT或INSERT的复杂作业。此外,查询语句支持UPSERT,即可以执行
count(*)
等包含更新操作的语句。作业调试功能需要已创建Session集群。Session集群适用于非生产环境的开发测试,您可以使用Session集群模式部署或调试作业,提高作业JM(Job Manager)资源利用率和作业启动速度。Flink全托管支持Per-Job集群和Session集群两种集群模式。两种集群模式有以下区别:
Per-Job集群(默认):作业之间资源隔离,每个作业都需要一个独立的JM,因为小任务JM的资源利用率较低,因此适用于占用资源比较大或持续稳定运行的作业。
Session集群:多个作业可以复用相同的JM,可以提高JM资源利用率。但因为JM复用会使得作业间稳定性会相互影响,且Session集群无法提供单独作业的Metric和报警能力,因此适用于作业测试运行。
说明无论使用何种集群模式,都需要确保已创建Session集群。在创建Session集群时会消耗集群资源,其中消耗的资源和您创建集群时选择的资源配置有关。
VVR 3.0.4及以下版本的每个Session集群运行后,都会额外消耗0.5 CU的资源。
使用限制
仅SQL作业支持单击调试进行作业调试。
CTAS和CDAS语法不支持进行调试。
VVR 4.0.8及以下版本的Session集群不支持调试CDC源表,因为CDC源表不是Append-only模式。
Flink全托管默认读取最多1000条数据后会自动暂停。
Session集群不支持显示数据曲线、监控告警功能和开启自动调优功能。
注意事项
Session集群作为开发测试环境,请勿将Session集群用于正式生产环境。如果将Session集群用于正式生产环境,会有以下业务稳定性问题:
JobManager单点故障会对集群内的所有作业造成影响。
TaskManager单点故障会对在其上有task运行的相关作业造成影响。
同一个TaskManager内部,不同Task之间如果没有进程隔离,则存在相互影响的潜在风险。
如果Session集群为默认配置,则有以下建议:
对于单并发的小作业,建议整个集群的作业总数不超过100个。
对于复杂作业,建议单作业最大并发数不超过512,64个并发的中等规模作业单集群不多于32个。否则可能会出现心跳超时等问题影响集群稳定性。此时,您需要增大心跳间隔和心跳超时时间。
如果您需要同时运行更多的任务,则需要增加Session集群的资源配置。
操作步骤
步骤一:创建Session集群
进入Session集群管理页面。
登录实时计算控制台。
在Flink全托管页签,单击目标工作空间操作列下的控制台。
在左侧导航栏上,单击Session管理。
单击创建Session集群。
填写配置信息。
参数详情如下表所示。
模块
配置项
说明
基础配置
名称
集群名称。
状态
设置当前集群的期望运行状态:
STOPPED:当集群配置完成后保持停止状态,同样会停止所有部署在该Session集群上运行的作业。
RUNNING:当集群配置完成后保持运行状态。
标签名
您可以在标签选项中添加作业标签,便于在总览页面快速定位作业。
标签值
无。
配置
引擎版本
引擎版本详情请参见引擎版本介绍和生命周期策略。建议您使用推荐版本或稳定版本,引擎版本标记含义详情如下:
推荐版本:当前最新大版本下的最新小版本。
稳定版本:还在产品服务期内的大版本下最新的小版本,已修复历史版本缺陷。
普通版本:还在产品服务期内的其他小版本。
EOS版本:超过产品服务期限的版本。
Flink重启策略配置
该参数取值如下:
Failure Rate:基于失败率重启。
选择该选项后,您还需要填写检测Failure Rate的时间间隔、时间间隔内的最大失败次数和每次重启时间间隔。
Fixed Delay:固定间隔重启。
选择该选项后,您还需要填写尝试重启的次数和每次重启时间间隔。
No Restarts:作业task失败不会重启。
重要如果您没有配置该参数,则按Apache Flink默认的重启策略,即当有Task失败时,如果没有开启Checkpoint,JobManager进程不会重启。如果开启了Checkpoint,则JobManager进程会重启。
更多Flink配置
在此设置更多Flink配置。例如
taskmanager.numberOfTaskSlots: 1
。资源配置
Task Managers数量
默认与并行度一致。
JobManager CPU Cores
默认值为1。
JobManager Memory
最小值为1 GiB,推荐值为4 GiB。单位建议使用GiB或MiB,例如,1024 MiB或1.5 GiB。
JobManager推荐配置包含JobManager资源以及心跳相关参数。具体内容如下:
由于JobManager上承载TaskManager心跳、作业Task序列化和资源调度等功能。因此建议JobManager资源不小于默认配置,请根据集群负载情况进行处理。
为了集群稳定,避免JobManager主线程繁忙导致心跳超时。因此建议心跳间隔(heartbeat.interval)不小于10秒,同时心跳超时(heartbeat.timeout)不小于50秒。请根据TaskManager个数与作业量上涨情况而上调。
TaskManager CPU Cores
默认值为2。
TaskManager Memory
最小值为1 GiB,推荐值为8 GiB。单位建议使用GiB或MiB,例如,1024 MiB或1.5 GiB。
TaskManager推荐配置包含单个TaskManager的Slot个数(taskmanager.numberOfTaskSlots)及TaskManager资源大小。具体内容如下:
对于单并发小作业,建议单Slot的CPU内存比为1:4,使用的资源不小于1核2 GiB。
对复杂作业,建议单Slot使用资源不小于1核4 GiB。在默认资源配置下,每个TaskManager可以配置2个Slot。
TaskManager资源不宜过小,也不宜过大,推荐默认资源配置并将Slot数目设为2。
重要如果单个TaskManager资源过小,则可能影响其上作业的稳定性,并且由于其Slot数目不多,无法有效平摊TaskManager的开销,降低了资源的利用效率。
如果单个TaskManager资源过大,则TaskManager上运行的作业数会很多,一旦TaskManager发生单点故障,影响面会很大。
日志配置
根日志等级
日志级别从低到高的顺序如下:
TRACE:比DEBUG更细粒度的信息。
DEBUG:系统运行状态的信息。
INFO:重要或者您感兴趣的信息。
WARN:系统可能出现潜在错误的信息。
ERROR:系统出现错误和异常的信息。
类日志等级
填写日志名和级别。
输出模板
日志模板,可以选择系统模板或自定义模板。
说明关于Flink与资源编排框架(例如Kubernetes、Yarn等)集成的相关选项详情,请参见Resource Orchestration Frameworks。
单击创建Session集群。
Session集群创建完成后,您可以在作业调试界面或部署界面选择此集群。
步骤二:作业调试
进行SQL作业开发,编写作业代码。详情请参见SQL作业开发。
在作业开发页面,单击调试,并选择调试集群,单击下一步。
配置调试数据。
如果您使用线上数据,直接单击确认即可。
如果您需要使用调试数据,需要先单击下载调试数据模板后,填写调试数据后,上传调试数据。
其中该页面涉及的功能解释如下。
配置项
说明
下载调试数据模板
为了便于编辑,您可以直接下载调试数据模板,模板已适配源表的数据结构。
上传调试数据
如果您需要使用本地调试数据进行调试,您可以先下载调试数据模板,本地编辑好数据后上传,并选中使用调试数据。
调试数据文件存在以下限制:
上传文件仅支持CSV格式。
CSV格式的文件必须含有表头,例如 id(INT)。
调试数据CSV文件最大支持1 MB或1千条记录。
数据预览
上传好调试数据后,单击源表名称左侧的
图标,可以预览数据和下载调试数据。
调试代码预览
调试功能会自动改变源表和结果表的DDL代码,但不会改变作业中的实际代码。您可以在下方预览代码详情。
确定好调试数据后,单击确定。
单击确定后,SQL编辑器下方会显示调试结果。