背景:
从前一篇文章我们知道flink消费kafka主题时是采用的手动assign指定分区的方式,这种消费方式是不处理主题的rebalance操作的,也就是消费者组中即使有消费者退出或者进入也是不会触发消费者所消费的分区的,那么疑问就来了,那是否比如kafka主题分区变多,或者新增了满足flink消费条件的kafka主题时,flink的kafka消费者是如何感知到并消费的?
源码追踪:
1.入口类StreamSource的run方法,这是数据源函数
这个方法中runWithPartitionDiscovery内容如下:
继续往下,可以看到开启了一个线程定时从broker中拉取监听的主题的分区数量
当获取到新增主题分区后,首先添加到KafkaFetch类的unassignedPartitionsQueue字段中,表明这个算子任务需要新增监听
注意KafkaFetch类的unassignedPartitionsQueue就是对应的KafkaConsumerThread类的unassignedPartitionsQueue字段,
然后在KafkaConsumerThread的run方法中就会不断检查是否有新增分区,如果有就使用assign指派
具体哪个分区指派给哪个算子任务的逻辑在如下代码中