在比较时,连接输出有何不同
JoinWindows.of(Duration.ofMillis(a)).grace(Duration.ofMillis(b))
和
JoinWindows.of(Duration.ofMillis(a + b))
ulydmbyx1#
这里有一个比较0和1 ms窗口的特定测试用例。测试的宽限期(0、1 ms、1000 ms)不会影响结果。| t1通道|第二次|窗口= 0毫秒|窗口= 1 ms|| - -|- -|- -|- -|| 一个||1个/ -|1个/ -|| | 三个|- /三|- /三|| 2个||2个/ -|三分之二|| | 四个|- /四|- /四|| 三个||三分之三|三分之三|| | | | 三分之四|| | 五个|- /五|- /五|| 四个||四分之四|4月3日|| | | | 四分之四|| | | | 四分之五|| | 六个|- /六|- /六|
TimestampExtractor
s4chpxco2#
窗口持续时间会影响记录之间的距离,并且仍然属于同一“组”。宽限期会影响记录之间的距离,并且仍然属于该组。要真正理解宽限期,我们需要掌握流时间和挂钟时间的影响。"不同的时间"Kafka使用了一个所谓的“流时间”概念,这是一个严格递增的时间戳,基于传入记录的事件时间。挂钟的时间会提前,因为你电脑里的小石英表一直在滴答滴答地走,但流时间只有在你有新记录时才会提前,没有新记录时,流时间就被冻结了。
示例
让我们看一个简单的场景,它只有一个主题。记录到达的 * 事件时间 * 和 * 流时间 * 如图所示。事件到达的 * 顺序 * 很重要,但实际的挂钟时间并不重要。
Event1 @ 0s // Stream time 0s Event2 @ 2s // Stream time 2s Event3 @ 5s // Stream time 5s Event4 @ 3s // Stream time still 5s Event5 @ 6s // Stream time 6s
窗口为5秒,宽限期为0秒
假设我们使用一个5秒的连接窗口。Event1打开一个新窗口。然后将Event2、Event3、Event4添加到该窗口中。Event5不能添加到该窗口中,并且没有宽限期,因此第一个窗口关闭,第二个窗口启动。最终结果:1.具有Event1、Event2、Event3、Event4的窗口1.具有Event5的窗口
Event1
Event2
Event3
Event4
Event5
窗口为4秒,宽限期为1秒
现在,我们使用一个较短的窗口,但有一个宽限期。Event1和Event2形成第一个窗口。Event3不能添加到窗口中,因为它提前了4秒以上。因此Event3启动一个新窗口。但是,它不会立即关闭第一个窗口,因为存在宽限期。第一个窗口在事件时间的总共4 + 1 = 5秒内保持打开状态。当Event4到达时,它仍是第一个窗口的一部分。当Event5到达时,宽限期已过,关闭第一个窗口,并将Event5添加到第二个窗口。最终结果:1.带有Event1、Event2、Event4的Windows1.带有Event3、Event5的窗口
4 + 1 = 5
2条答案
按热度按时间ulydmbyx1#
这里有一个比较0和1 ms窗口的特定测试用例。测试的宽限期(0、1 ms、1000 ms)不会影响结果。
| t1通道|第二次|窗口= 0毫秒|窗口= 1 ms|
| - -|- -|- -|- -|
| 一个||1个/ -|1个/ -|
| | 三个|- /三|- /三|
| 2个||2个/ -|三分之二|
| | 四个|- /四|- /四|
| 三个||三分之三|三分之三|
| | | | 三分之四|
| | 五个|- /五|- /五|
| 四个||四分之四|4月3日|
| | | | 四分之四|
| | | | 四分之五|
| | 六个|- /六|- /六|
TimestampExtractor
进行连接s4chpxco2#
窗口持续时间会影响记录之间的距离,并且仍然属于同一“组”。宽限期会影响记录之间的距离,并且仍然属于该组。要真正理解宽限期,我们需要掌握流时间和挂钟时间的影响。
"不同的时间"
Kafka使用了一个所谓的“流时间”概念,这是一个严格递增的时间戳,基于传入记录的事件时间。
挂钟的时间会提前,因为你电脑里的小石英表一直在滴答滴答地走,但流时间只有在你有新记录时才会提前,没有新记录时,流时间就被冻结了。
示例
让我们看一个简单的场景,它只有一个主题。记录到达的 * 事件时间 * 和 * 流时间 * 如图所示。事件到达的 * 顺序 * 很重要,但实际的挂钟时间并不重要。
窗口为5秒,宽限期为0秒
假设我们使用一个5秒的连接窗口。
Event1
打开一个新窗口。然后将Event2
、Event3
、Event4
添加到该窗口中。Event5
不能添加到该窗口中,并且没有宽限期,因此第一个窗口关闭,第二个窗口启动。最终结果:
1.具有
Event1
、Event2
、Event3
、Event4
的窗口1.具有
Event5
的窗口窗口为4秒,宽限期为1秒
现在,我们使用一个较短的窗口,但有一个宽限期。
Event1
和Event2
形成第一个窗口。Event3
不能添加到窗口中,因为它提前了4秒以上。因此Event3
启动一个新窗口。但是,它不会立即关闭第一个窗口,因为存在宽限期。第一个窗口在事件时间的总共4 + 1 = 5
秒内保持打开状态。当Event4
到达时,它仍是第一个窗口的一部分。当Event5
到达时,宽限期已过,关闭第一个窗口,并将Event5
添加到第二个窗口。最终结果:
1.带有
Event1
、Event2
、Event4
的Windows1.带有
Event3
、Event5
的窗口