kafka分区数扩容对flink任务的影响

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

kafka分区数扩容对flink任务的影响

nobleyd
如题,flink任务当前从我了解来看,是直接先查询所有分区信息,然后assign方式指定分区消费的。
包括,之前多个任务使用相同group.id消费相同topic并不会相互影响,也是这个原因,因为是通过assign方式消费,而不是分组订阅方式。

当然相关的还有一个分区发现机制(我是开启的)。

在这种情况下,我想知道topic的分区扩容之后,flink能立即感知到分区多了吗?如果不能,我猜测会导致丢失数据,因为等发现新分区的时候,会默认使用kafka配置的latest方式消费。
不清楚我的猜测对不对,看看有没有人清楚,解答下,这俩天计划做分区扩容了,不清楚是否需要提前停flink任务。
Reply | Threaded
Open this post in threaded view
|

Re: kafka分区数扩容对flink任务的影响

JasonLee
hi
Flink是可以感知到partition的增加的
消费kafka的时候设置一下KEY_PARTITION_DISCOVERY_INTERVAL_MILLIS这个参数 大于0就可以了



--
Sent from: http://apache-flink.147419.n8.nabble.com/
Best Wishes
JasonLee
Reply | Threaded
Open this post in threaded view
|

Re: kafka分区数扩容对flink任务的影响

nobleyd
嗯,你说的这个我知道。跟我的问题不太意义,不过我自己看源码解决了,给大家分享下。
1 无状态启动情况下:
(1)首先flink采用的是assign方式,非subscribe方式。
(2)指定offset消费:未指定offset的分区会默认使用group offset消费。
(3)指定timestamp消费:未查询到offset的分区会默认使用latest消费。
(4)指定latest消费/指定earliest消费/指定group offset消费:这几种没啥好说的,按照对应策略消费即可。

2 有状态启动情况下:
(1)对于存在状态的部分,按照状态中offset继续消费。
(2)对于不存在于状态的部分分区,比如新增的分区,默认按照earliest消费。

3 非启动情况,任务运行中新增分区情况:
新增分区按照earliest offset消费,见AbstractFetcher.addDiscoveredPartitions方法。

JasonLee <[hidden email]> 于2020年8月20日周四 上午10:57写道:

> hi
> Flink是可以感知到partition的增加的
> 消费kafka的时候设置一下KEY_PARTITION_DISCOVERY_INTERVAL_MILLIS这个参数 大于0就可以了
>
>
>
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/
>