开发者社区> 问答> 正文

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

管道简单代码是研究员:

source = env.addSource(kafkaConsumer)
.map(func).setParallelism(2).sink()
如何确定顺序?

展开
收起
社区小助手 2018-12-11 16:14:03 3236 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

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

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

    有了这些假设,答案就是你不能做很多事情。地图运算符的两个实例之间存在竞争,非并行接收器将以任意方式交错这两个传入流。

    如果以某种方式标记流记录,比如使用递增的时间戳或ID,那么您可以假设引入一些缓冲并重新建立原始排序,可以是在自定义接收器中,也可以是在地图和接收器之间的非并行RichCoMap函数中运营商。

    另一方面,如果您的源以某种方式进行分区或键控,并且您只需要在每个键的基础上维护或建立排序,那么就有更好的答案。

    2019-07-17 23:19:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 覃立辉 立即下载
Flink CDC Meetup PPT - 孙家宝 立即下载
Flink CDC Meetup PPT - 徐榜江 立即下载