为了让大家更好的理解Dataphin实时计算的功能,这里向大家介绍一个主备链路相关的Case:
实时计算场景由于其需要24小时不间断的运行,对于任务的稳定性、时效性要求异常的高。在通常情况下,为了保证结果能够高准确、低延迟地产出,生产环境中需要双链路甚至三链路来实现主备的容灾处理。那么对于相同的一套指标,我们需要维护的代码就会根据链路数量成倍往上翻。特别是在变更的时候,人工操作有可能会带来很多的不一致。
考虑到主备任务处理逻辑需要保持强一致性,差异仅仅在于输入流/表以及输出流/表,dataphin针对这种场景设计了专门的处理方案,引入了模版和模版任务的概念,其与具体的SQL任务关系如下:
TIPS:(概念简介)
实时SQL为具体执行SQL代码,该代码由模版任务+模版参数信息+任务参数信息+任务配置信息一起实例化得到,其中任务配置信息为任务的资源配置、队列信息、版本信息等,任务参数信息为Flink的任务粒度配置参数,而模版参数信息则是自动提取的模版任务中的参数信息,该参数会替换模版任务中的各项待替换项。
模版为代码的高级抽象,在dataphin中视为了一类资源,可以由模版任务引用。
模版任务为一种任务类型,该类型任务必须依赖于某一个模版,并且在预编译阶段进行实例化,生成最终可执行sql。
废话不多说,直接上干货。
1) 针对一个处理逻辑,需要同时部署主备两链路,两者具体逻辑一致,差异点在于数据来源的TT topic以及数据存储的alihbase集群以及tableName(其中alihabse集群信息已经通过实时元表实现了对用户透明),那么我们就可以抽象一个nanhua_test的模版,其中设置两类参数output_table和input_table。
2)新建模版任务nanhua_test_template_sql,引用nanhua_test版本为1的模版
3)自定义模版参数、任务参数、任务配置信息,输入各自链路对应的参数值,比如图中的源表名和目标表名,即可生成对应链路的实时任务。
4)当需要对模版的执行逻辑进行变更时,可以在模版中进行修改,直接应用到选定的引用的模版任务中。这样,对于多个主备任务,我们只需要维护一个模版就可以了,大大节省了开发成本和维护成本,再也不用担心主备任务的口径不一致了。