相同点都是 前面并行度 % 后面并行度  ,也就是要求前面并行度>=后面并行度  

1 flink consumer kafka数据

mod(kafka partiton) % (flink 并行度)

1.1 kafka = flink 并行度

一对一的关系

1.2 kafka > flink

flink 每个并行度会可能消费多个kafka分区数据

1.3 kafka < flink

flink 某个并行度肯定会没有数据消费

2 flink producer kafka数据

配置keyby ,走fixed策略 ,保证消息有序;

不用keyby, 用robin策略

2.1  用 Robin 的方式写入 Kafka

  • 1、实现 exactly-once 语义的 kafka sink,用 Robin 的方式写入 Kafka
  • 2、flink 会把 一个 sink subtask 的数据以 round-robin 方式写入 kafka 的各个分区
  • 3、注意:使用此方法可以不用设置 sink 的并行度

2.2  fixedPartition

flink sink之前每个并行度都是已经特定key by column的数据了,消息有序。

  •  1、实现 exactly-once 语义的 kafka sink
  •  2、fixedPartition: 一个 kafka partition 对应一个 flinkkafkaproducer。配置该种方式时,flink kafka producer 并行度应该不小于写入的 kafka topic 分区数,否则会导致有些分区没有数据
  • flink写入kafka默认采用的分区策略的代码实现在FlinkFixedPartitioner这个类中,并不是我们理解的轮盘转方式写入下游分区,而是每个并发固定的写入到kafka的某个分区,举个例子:flink有3个sink并发写入kafka,而kafka有10个分区,那么数据只会写入kafka的0-2号分区中,其他分区不会有数据。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐