apache-kafka 增加联接窗口大小与设置宽限期之间的区别

qni6mghb  于 2022-11-01  发布在  Apache
关注(0)|答案(2)|浏览(164)

在比较时,连接输出有何不同

JoinWindows.of(Duration.ofMillis(a)).grace(Duration.ofMillis(b))

JoinWindows.of(Duration.ofMillis(a + b))
ulydmbyx

ulydmbyx1#

这里有一个比较0和1 ms窗口的特定测试用例。测试的宽限期(0、1 ms、1000 ms)不会影响结果。
| t1通道|第二次|窗口= 0毫秒|窗口= 1 ms|
| - -|- -|- -|- -|
| 一个||1个/ -|1个/ -|
| | 三个|- /三|- /三|
| 2个||2个/ -|三分之二|
| | 四个|- /四|- /四|
| 三个||三分之三|三分之三|
| | | | 三分之四|
| | 五个|- /五|- /五|
| 四个||四分之四|4月3日|
| | | | 四分之四|
| | | | 四分之五|
| | 六个|- /六|- /六|

  • t1是主题#1,t2是主题#2
  • t1 / t2列中的条目是嵌入在记录值中的时间戳,它们将用于通过TimestampExtractor进行连接
s4chpxco

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打开一个新窗口。然后将Event2Event3Event4添加到该窗口中。Event5不能添加到该窗口中,并且没有宽限期,因此第一个窗口关闭,第二个窗口启动。
最终结果:
1.具有Event1Event2Event3Event4的窗口
1.具有Event5的窗口

窗口为4秒,宽限期为1秒

现在,我们使用一个较短的窗口,但有一个宽限期。Event1Event2形成第一个窗口。Event3不能添加到窗口中,因为它提前了4秒以上。因此Event3启动一个新窗口。但是,它不会立即关闭第一个窗口,因为存在宽限期。第一个窗口在事件时间的总共4 + 1 = 5秒内保持打开状态。当Event4到达时,它仍是第一个窗口的一部分。当Event5到达时,宽限期已过,关闭第一个窗口,并将Event5添加到第二个窗口。
最终结果:
1.带有Event1Event2Event4的Windows
1.带有Event3Event5的窗口

相关问题