开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

kafka的partition是不是应该和slot一一对应?我的一个和window有关的应用在slo

kafka的partition是不是应该和slot一一对应?我的一个和window有关的应用在slot数目不等于partition的时候会不出结果,另一个单纯读写的应用使用一个slot消费全部partition是可以的。您聊不了解这里面的机制? 本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 点击这里欢迎加入感兴趣的技术领域群。

展开
收起
黄一刀 2019-12-11 14:46:24 2292 0
1 条回答
写回答
取消 提交回答
  • 这个问题比较宽泛,涉及到的内容太多了,我只了解一点,所以从简单来回答,如果不对,还请见谅 1、slot: flink 的 task manager 组件可以配置多个slot(多个算子的job,如果都 chain 在一起,就可以在一个 TM 的一个 slot 里面执行,如果有keyby或者parallesm 不同的时候,前后的算子就不能在同一个 slot 里面执行,但是可以在一个 TM 里面,比如一个 TM 配置两个 slot,就可以),简单可以认为 TM 是一个 进程,多个 slot 是里面的不同线程,同一个线程里面的算子,数据可以直传,不同线程就需要通信了 2、kafka 的 partition: 严格来说是和 slot 没有关系的,但是 flink 在读 kafka 的时候默认是这样的: source 的最大并行度不能大于 kafka 的分区数(多也只是多得部分拿不到数据,出于吞吐量和性能的考虑,一般是建议 source 的并行度和 kafka 的分区数一致,这样每个并发可以读一个分区,效率比较高,但是数据少的时候一个并发读100个分区都没关系); 这里还有一点额外的内容就是,flink 最大并发数等于 最小 slot 数,因为同一个算子的不同并发,是不可以在同一个slot 里面的(也可能 算子比较多,TM 的 slot 用完了,需要多开 TM的情况,所有是 等于最小 slot )

    一个和window有关的应用在slot数目不等于partition的时候会不出结果 : 这个应该是理解有点问题,可以详细下问题 另一个单纯读写的应用使用一个slot消费全部partition是可以的 : 这个上面有,其实是 source 的并行度 和 partition的问题,两边的个数其实是不影响程序结果的,只是表现不同,source 多就会有部分没有数据,partition多就会有一个source 的并行读多个 partiton

    2019-12-11 14:46:52
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
Java Spring Boot开发实战系列课程【第16讲】:Spring Boot 2.0 实战Apache Kafka百万级高并发消息中间件与原理解析 立即下载
MaxCompute技术公开课第四季 之 如何将Kafka数据同步至MaxCompute 立即下载
消息队列kafka介绍 立即下载