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