Flink SQL如何保证分topic有序

一、场景

在做实时数仓的时候,我们需要保证提高消费能力和数据有序,那如果要用Flink sql 和 Kafka交互,就会出现如下两个问题:

  1. flink sql 通过ddl读取和写入kafka怎么设置并行度呢?
  2. 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

你可能感兴趣的:(实时数仓,实时数仓,flink,sql,kafka)