一、场景
在做实时数仓的时候,我们需要保证提高消费能力和数据有序,那如果要用Flink sql 和 Kafka交互,就会出现如下两个问题:
- flink sql 通过ddl读取和写入kafka怎么设置并行度呢?
- flink sql 通过ddl写入kafka怎么自定义分区呢?
二、问题剖析
首先我们知道Flink sql不支持不支持相关的设置,但是可以通过env或配置文件设置所有算子的并行度。同时kafka默认分区有序,所以source的并发一般小于等于kafka的partition数,理想状态是1:1。sink的并发一般也是和输出topic相关,如果要保证有序,可以按key进行分区,保证数据均匀可以自定义分区策略,比如roundrobin、shuffle等。
提示:对kafka分区不熟悉的可以看我之前总结的相关文章:
深入分析Kafka架构(三):消费者消费方式、三种分区分配策略、offset维护
三、解决方案
首先第一个问题我们可以为咱们的程序设置默认的并发度,用代码或者命令行参数,配置文件都可以。
第二个问题可以将 connector.sink-partitioner
设置为 custom
, 然后设置 connector.sink-partitioner-class