kafka的exactly once是通过checkpoint机制保存消费位点来保证的,和event time没关系。在进入时间窗口前提取event time和设定watermark即可。
On Wed, Dec 18, 2019 at 4:12 PM 猫猫 <[email protected]> wrote: > 图片不能粘贴,放到github上面了。 > https://github.com/maobuji/Blog/blob/master/image/changeEventTime.jpg > > > > > ------------------ 原始邮件 ------------------ > 发件人: "猫猫"<[email protected]>; > 发送时间: 2019年12月18日(星期三) 下午4:03 > 收件人: "user-zh"<[email protected]>; > > 主题: 回复: 关于直接设置Watermark和flatmap后再设置的疑问 > > > > 可能是我说的不太明确,我理解事件时间在整个流系统下只有一个。 > 但是读kafka时,我无法直接拿到业务数据中的event-time。因为数据可能会被拆分为多条。 > 我只能当做字符串取出,并设置事件时间为kafka的时间。 > > > 在进行一次消息转换后,才能获取到数据中的时间。所以我需要在flatmap以后才能正确的设置event-time > 但我又需要kafka的精确一次特性。 > > 所以问题转变为如下的问题,我能在流中重设eventTime吗?但对最初的流(kafka提交)不影响。 > 所以也就是之前提到的问题。 > env.addSource(flinkKafkaConsumer).assignTimestampsAndWatermarks(...) > > env.addSource(flinkKafkaConsumer).flatMap(...).assignTimestampsAndWatermarks(...); > > > 更进一步,我能向下图一样,在不同的流过程中,设置不同的eventTime吗?并且他们能够实现整体提交。 > > > > > > ------------------ 原始邮件 ------------------ > 发件人: "LakeShen"<[email protected]>; > 发送时间: 2019年12月18日(星期三) 下午2:10 > 收件人: "user-zh"<[email protected]>; > > 主题: Re: 关于直接设置Watermark和flatmap后再设置的疑问 > > > > flatmap 逻辑中,你是否对消息记录的时间处理了吗,watermark 的更新的逻辑是比前一次 watermark 的时间截要大同时非空。 > > 猫猫 <[email protected]> 于2019年12月18日周三 上午9:27写道: > > > env.addSource(flinkKafkaConsumer).assignTimestampsAndWatermarks(...) > > > > > env.addSource(flinkKafkaConsumer).flatMap(...).assignTimestampsAndWatermarks(...); > > > > 使用kafka进行消费,直接设置Watermark和经过flatMap()以后再设置,会产生什么样的区别和影响。 > > flatMap可能会将数据处理为1-N条。那么在这种情况下,还能够保证kafka的精确一次吗? -- Regards, DinoZhang
