您可以使用作业调试功能模拟作业运行、检查输出结果,验证SELECT或INSERT业务逻辑的正确性,提升开发效率,降低数据质量风险。本文为您介绍如何进行Flink SQL作业调试。
背景信息
您可以在Flink开发控制台使用作业调试功能本地验证作业逻辑的正确性,而不会将数据实际写入您生产的下游中(无论您使用什么样的结果表)。使用调试功能时,您可以使用上游的线上数据或指定调试数据。调试可以包含多个SELECT或INSERT的复杂作业。此外,查询语句支持UPSERT,即可以执行count(*)
等包含更新操作的语句。
使用限制
作业调试功能需要已创建Session集群。
仅SQL作业支持作业调试。
CTAS和CDAS语法不支持调试。
VVR 4.0.8及以下版本的Session集群不支持调试CDC源表,因为CDC源表不是Append-only模式。
Flink全托管默认读取最多1000条数据后会自动暂停。
注意事项
在创建Session集群时会消耗集群资源,其中消耗的资源和您创建集群时选择的资源配置有关。
VVR 3.0.4及以下版本的每个Session集群运行后,都会额外消耗0.5 CU的资源。
请勿将Session集群用于正式生产环境,Session集群可以作为开发测试环境。使用Session集群调试作业,可以提高作业JM(Job Manager)资源利用率。在正式环境中使用Session集群,JM的复用机制会对作业间的稳定性产生负面影响,详情如下:
JobManager单点故障会对集群内的所有作业造成影响。
TaskManager单点故障会对在其上有task运行的相关作业造成影响。
同一个TaskManager内部,不同Task之间如果没有进程隔离,则存在相互影响的潜在风险。
如果Session集群为默认配置,则有以下建议:
对于单并发的小作业,建议整个集群的作业总数不超过100个。
对于复杂作业,建议单作业最大并发数不超过512,64个并发的中等规模作业单集群不多于32个。否则可能会出现心跳超时等问题影响集群稳定性。此时,您需要增大心跳间隔和心跳超时时间。
如果您需要同时运行更多的任务,则需要增加Session集群的资源配置。
操作步骤
步骤一:创建Session集群
进入Session集群管理页面。
登录实时计算控制台。
单击目标工作空间操作列下的控制台。
在左侧导航栏上,单击
。
单击创建Session集群。
填写配置信息。
参数详情如下表所示。
模块
配置项
说明
基础配置
名称
Session集群名称。
部署目标
选择目标资源队列,资源队列创建详情请参见管理资源队列。
状态
设置当前集群的期望运行状态:
RUNNING:当集群配置完成后保持运行状态。
STOPPED:当集群配置完成后保持停止状态,同样会停止所有部署在该Session集群上运行的作业。
标签名
您可以在标签选项中添加作业标签,便于在总览页面快速定位作业。
标签值
无。
配置
引擎版本
引擎版本详情请参见引擎版本介绍和生命周期策略。建议您使用推荐版本或稳定版本,引擎版本标记含义详情如下:
推荐版本:当前最新大版本下的最新小版本。
稳定版本:还在产品服务期内的大版本下最新的小版本,已修复历史版本缺陷。
普通版本:还在产品服务期内的其他小版本。
EOS版本:超过产品服务期限的版本。
Flink重启策略配置
该参数取值如下:
Failure Rate:基于失败率重启。
选择该选项后,您还需要填写检测Failure Rate的时间间隔、时间间隔内的最大失败次数和每次重启时间间隔。
Fixed Delay:固定间隔重启。
选择该选项后,您还需要填写尝试重启的次数和每次重启时间间隔。
No Restarts:作业task失败不会重启。
重要如果您没有配置该参数,则按Apache Flink默认的重启策略,即当有Task失败时,如果没有开启Checkpoint,JobManager进程不会重启。如果开启了Checkpoint,则JobManager进程会重启。
其他配置
在此设置更多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编辑器下方会显示调试结果。
相关文档
作业开发或调试完成后,如果您需要将作业部署上线,请参见部署作业。
完成作业部署后,如果您需要将作业启动至运行阶段,请参见作业启动。
Flink JAR作业和Flink Python作业的调试方法,请参见JAR作业调试或Python作业调试。
如果您需要了解Flink SQL作业的完整的操作流程示例,请参见Flink SQL作业快速入门。