Flink Map函数具有多重并行性,以及如何确保最终接收器的顺序

时间:2018-08-27 02:04:05

标签: apache-flink

管道的简单代码是伙伴:

source = env.addSource(kafkaConsumer)
.map(func).setParallelism(2).sink()

如何确保按顺序排列?

1 个答案:

答案 0 :(得分:0)

首先,让我们假设示例中的所有其他内容都具有一个并行度,并且只有map函数将并行运行。 (尽管实际上要实现这一点,但必须在某个位置进行配置;默认并行度高于1。)

我们还假设您的Kafka使用者正在从具有一个分区的单个主题中读取内容,并且您正在询问如何实现并行转换以保留输入中存在的顺序。

基于这些假设,答案是您无能为力。 map运算符的两个实例之间存在竞争,并且非并行接收器将以任意方式对这两个传入流进行交织。

如果流记录是以某种方式标记的,例如带有递增的时间戳或ID,则可以假设在自定义接收器或您之间的非并行RichCoMap函数中引入一些缓冲并重新建立原始顺序。地图和接收器运算符。

反之,如果您的源以某种方式进行了分区或键控,而您只需要根据每个键维护或建立顺序,那么会有更好的答案。