背景
目前flink sql是不支持source/sink并行度配置的,flink sql中各算子并行度默认是根据source的partition数或文件数来决定的,比如常用的kafka source topic的partition是100,那么fink sql任务的并发就是100。但有时任务相对简单,比如datax任务,没有逻辑根本不需要很大的并发,100并发显然会造成资源的严重浪费。那么就有必要扩展connector使其支持并发度配置。
如何做
一、首先,需要在ddl的with参数中支持并发的配置,比如定义’parallelism‘ = ’10‘。
二、需要各connector支持这个参数的解析,这里分1.11版本之前还是之后。
1.11前
1.11版本,对Table接口进行了重构,在这之前实现一个connector需要做哪些,请见Flink实战之自定义flink sql connector。这里就以kafka为例来说明。
当ddl增加了parallelism配置之后,如何让connector识别呢?
- 需要在KafkaTableSourceSinkFactoryBase#supportedProperties增加一行properties.add(“parallelism”);
- parallelism的配置所在的properties会传递到KafkaTableSourceBase或KafkaTableSinkBase
- 这是就看你是需要扩展source还是sink或者两者都要了,source的话在KafkaTableSource

本文介绍了在Flink中为SQL connector配置并行度的方法,针对1.11版本前后提供了不同的实现策略。在1.11之前,通过修改connector的源码来支持并发配置;1.11之后,由于接口重构,可以通过修改框架代码或利用FLIP-146提供的ParallelismProvider接口来设置sink的并行度。
最低0.47元/天 解锁文章
1634

被折叠的 条评论
为什么被折叠?



