Hi, 拉取过的消息,成功消费完更新offset完成消费。但可能存在的情况是,拉取过来的消息,没有成功消费下task挂掉了(offset没有提交),后面是会重再重新拉取进行消费的。Kafka的Extractly-Once是有作用范围的( 客户端从拉取消息,到消费完成,成功提交位移),要整个系统都实现精确一次语义,*flink拉取消息到成功提交位移这部分逻辑* 需要支持或实现幂等的,即能够处理*可能的多次拉取到成功提交位移前*这种情形。
Jimmy Wong <[email protected]> 于2019年9月9日周一 下午5:44写道: > Hi,我的理解是这样的:这个问题是由于 source 的重放,导致 Flink > 内部就重复计算,并且会传到下游,最终反映在结果上,或者说这种操作不能保证内部 Extractly-Once?比如在 [8:00,8:05) 这 5 > 分钟之内,在 8:03 某个 task 挂了,然后又重新拉起。这时候从 checkpoint 的恢复获得的是这 8:00 分钟之前的 Kafka > offset,但是 [8:00,8:03) 之内的消息已经消费,流向下游。重新拉起之后,由于某种原因 source 重放,那么这时候 > [8:00,8:03) 的数据会再次被消费,并且会发往下游。 > > > > > > > 在 2019-09-09 16:01:48,"[email protected]" <[email protected]> 写道: > > sink 的精确一次需要外部系统的支持的, 比如 kafka 的事务性producer, 社区有一篇文章讲的很好, 可以看一下 > https://ververica.cn/developers/exactly-once/ > > [email protected] > > 发件人: Jimmy Wong > 发送时间: 2019-09-09 11:50 > 收件人: [email protected] > 主题: Kafka 与 extractly-once > Hi,all: > 请教一下,我设置 checkpoint 的时间是 5 分钟,如果在这 5 分钟之内,某个 task 挂了,然后又重新拉起。我是不是可以理解为这时候从 > checkpoint 的数据获得的是这 5 分钟之前的 Kafka offset,但是这 5 > 分钟之内的消息已经消费,流向下游。重新拉起之后,source 重放,那么这时候这 5 分钟的数据会再次被消费麽?如果再次消费,那么怎么保证 > Extractly-Once 呢? > | | > Jimmy > | > | > [email protected] > | > 签名由网易邮箱大师定制 > >
