flink如何监听kafka主题配置变更

背景:

从前一篇文章我们知道flink消费kafka主题时是采用的手动assign指定分区的方式,这种消费方式是不处理主题的rebalance操作的,也就是消费者组中即使有消费者退出或者进入也是不会触发消费者所消费的分区的,那么疑问就来了,那是否比如kafka主题分区变多,或者新增了满足flink消费条件的kafka主题时,flink的kafka消费者是如何感知到并消费的?

源码追踪:

1.入口类StreamSource的run方法,这是数据源函数
flink如何监听kafka主题配置变更_第1张图片
这个方法中runWithPartitionDiscovery内容如下:
flink如何监听kafka主题配置变更_第2张图片

继续往下,可以看到开启了一个线程定时从broker中拉取监听的主题的分区数量
flink如何监听kafka主题配置变更_第3张图片

当获取到新增主题分区后,首先添加到KafkaFetch类的unassignedPartitionsQueue字段中,表明这个算子任务需要新增监听
flink如何监听kafka主题配置变更_第4张图片
注意KafkaFetch类的unassignedPartitionsQueue就是对应的KafkaConsumerThread类的unassignedPartitionsQueue字段,
flink如何监听kafka主题配置变更_第5张图片

然后在KafkaConsumerThread的run方法中就会不断检查是否有新增分区,如果有就使用assign指派
flink如何监听kafka主题配置变更_第6张图片

具体哪个分区指派给哪个算子任务的逻辑在如下代码中
flink如何监听kafka主题配置变更_第7张图片

你可能感兴趣的:(flink,flink,kafka,大数据)