双流join对数据和环境的要求很严格,这样适用的业务场景就会有限。没有办法保证环境和数据一致是严格符合的

发送自 Windows 10 版邮件<https://go.microsoft.com/fwlink/?LinkId=550986>应用

发件人: tison<mailto:wander4...@gmail.com>
发送时间: 2020年4月15日 22:26
收件人: user-zh<mailto:user-zh@flink.apache.org>
主题: Re: 双流Join 基于IngressTime计算后在按照Keyby sum聚集后每次计算结果不一致的问题

FYI

https://ci.apache.org/projects/flink/flink-docs-stable/dev/event_time.html
https://ci.apache.org/projects/flink/flink-docs-master/dev/event_timestamps_watermarks.html
https://ci.apache.org/projects/flink/flink-docs-master/dev/event_timestamp_extractors.html

IngestionTime 的时间基准是进入 Flink 系统即 Source 算子生产数据时附上的时间戳,你后面有
window/join,这个时间的间隔不是确定性的,大数据量下因为 GC 等原因有不同延迟从而导致 Window 划分不一致是正常的。即使使用
EventTime,在 Watermark
不够可靠的情况下也有可能不一致,足够可靠又可能受到滞后数据的影响损失性能并占用内存。可以看看上面文档的相关内容。

Best,
tison.


tison <wander4...@gmail.com> 于2020年4月15日周三 下午10:18写道:

> IngestionTime 多次运行结果不一样很正常啊,试试 event time?
>
> Best,
> tison.
>
>
> xuefli <xue...@aliyun.com.invalid> 于2020年4月15日周三 下午10:10写道:
>
>> 遇到一个非常头痛的问题
>>
>> Flink1.10的集群,用hdfs做backend
>>
>> 一个流aStream准备了10亿的数据,另外一个流bStream百万
>> 如果如下操作
>>
>> 我遇到一个问题 双流Join 
>> 带windows,使用IngressTime,在一个流的数据限制在几十万级别时,每次重算结果一致。但数据量换成10亿级别,另外一个流不便。在同样的情况,多次运行,每次运行结果不一样,我抽样一个特定的数据的结果每次不同
>>  。 aStream.join(bStream) -->windows-->apply(flatMap)得到cStream后 
>> 再对cStream进行keyBy-->timeWindow-->sum.
>> 我用fromcollection也是没有问题,但数据量很大时,就结果不对,每次运行的结果都有差异。
>> 用dataStream.fromcollection这样的更小的数据也是没有问题,每次重算
>> 但数据量很大时,就会这样。
>>
>>
>> 每次计算的结果不一样,这个对业务系统挑战巨大
>>
>>
>> 发送自 Windows 10 版邮件应用
>>
>>

回复