超越基本知识:apache kafka中的窗口
#tooling #database #kafka #apachekafka

什么是窗口?

该帖子最初发表在Confluent blog

如果您使用Kafka流或KSQLDB创建应用程序,并且该应用程序涉及聚合,则您可能会使用窗口。

这是为什么?

好吧,数据的聚集会随着时间的推移而积累,而没有限制,这些聚合会停止积累。输入窗口,该窗口定义可以累积的数据量。

请注意,窗口采用四个形式,具体取决于窗口是由大小和周期定义的,还是窗口是事件触发的。

table with 'hopping' and 'tumbling' under 'Size and Period' and 'session' and 'sliding' under 'Event triggered'

例如,说您使用水分传感器设计应用程序,以提醒室内植物过于干燥时。您可以在过去一个小时内对水分读数低的植物进行过滤器。如果该过滤器返回任何内容,则该事件可能会触发每小时翻滚的窗口的聚合。结果写入警报。

让我们看一下细节的每种窗口类型。

跃迁

什么是跳窗?

graph of a hopping window

跳窗被时间绑定,并由窗口大小和前进的时间块的大小定义(均以秒为单位测量)。

考虑上图中的红色窗口,并考虑一下它的前进:如果您的窗口大小为50秒,但预先大小为15秒,则窗户之间的重叠为35秒。在跳窗口中,窗口大小通常设置为比预先大小的更大的时间。上图显示了如果将窗口作为矩形拿到窗口并将其叠加在波浪流的数据流中,那么重叠的矩形矩形的重叠可能会是什么样,该矩形重叠表示重叠窗口。

注意:翻滚窗户永远不会重叠或有间隙。跳窗可能有空白或重叠,或者可能没有。

跳窗实现的一个经典示例是一个仪表板,具有移动平均值,在某个电子商务页面上的平均点击(例如Air Fryer的产品详细信息页面)在过去24分钟的窗口中小时。

创建跳窗口

如上所述,您需要配置跳跃窗口的两个关键信息:窗口大小和进步尺寸。

当您与Kafka流合作时,您需要同时设置Windowsize和Advancesize。请参阅此Kafka流101教程中更完整的示例。

如果您使用KSQLDB实现跳跃窗口,则需要确保使用窗口跳转语法创建表。您将设置两种尺寸的尺寸并提前。您可以在this tutorial中查看一个更完整的示例。

翻滚

什么是翻滚窗口?

diagram of tumbling window

类似于跳窗,翻滚窗户也是基于时间的。实际上,翻滚窗口是跳窗的特殊子类型,在该窗口中,窗口和前进是相同的。这意味着单个事件只会在一个翻滚的窗口中出现。如您所见,该图与前者不同,因为矩形不重叠,代表非重叠的窗口。

翻滚窗户对于报告您希望事件属于单个窗口的地方很有用,例如在过去的55秒内按总信用卡刷新。

创建一个翻滚的窗户

在Kafka Streams中创建一个翻滚的窗口使用与跳窗口相同的过程,但是您需要确保Windowsize和Prodingize是相同的。

在ksqldb中,您使用表上的窗口翻滚语法并设置大小。 Confluent网站上的教程部分包含一个完整的示例:How to create tumbling windows.

会话

什么是会话窗口?

diagram of session window

事件触发了会话窗口。该机制涉及所谓的无活动差距。除非被新事件打断,否则该差距是窗口增长的时间。当新事件流入输入时,无活动的窗口重置并继续增长。如果您的无活动窗口太短或您有很多事件,这可能会导致很长的窗口!

在上图中,无活动间隙由蓝色矩形表示,由恒星表示的事件隔开。代表会话窗口的矩形跨越了无活动的间隙。

用例涉及跟踪用户活动,如果您想知道一段时间内生成了多少事件(例如,用户的FlixMovie Binge到底是多长时间?)。

创建会话窗口

在Kafka流中创建会话窗口涉及设置InActivityGap。您可以在本教程中看到更完整的描述:窗口。

另一个选项是使用ksqldb,使用带有窗口会话语法的表。您可以在此处查看有关此的教程:Create session windows

滑动

什么是滑动窗口?

diagram of sliding window

滑动窗口也基于时间,因此窗口的大小以秒为单位定义。为了触发滑动窗口,必须在定义的时间窗口内发生某些用户事件。例如,如果您想从定义的三个小时的定义时间内进行的用户,您可能会使用这种类型的窗口。 。

在上图中,定义的时间量由大蓝色矩形表示。用户事件由两个金星表示,它们之间的紫色矩形代表数据窗口。

创建滑动窗口

在流中API中创建滑动窗口时,需要设置定时差。您可以在Confluent开发人员的this windowing tutorial中找到一个更完整的示例。

支持明确设置滑动窗口的支持在KSQLDB中尚不可用。

有关晚事的注释

如果您的活动迟到了怎么办?它可能会偏向您的分析;因此,您可以在翻滚,跳动和滑动窗户上引入“宽限期”。基本上,即使这些事件的时间戳记大于窗口的末端,窗口会捕获事件的固定时间。请注意,宽限期之后发生的事件将不包括在内。会话窗口没有宽限期,因为它们仅基于用户行为而不是时间。

自KIP-633以来,Kafka流没有默认的宽限期。但是,在KSQLDB中,默认值为24小时。

从这往哪儿走

如果您发现使用ApacheKafka®窗口简介有用,则您也可能对此资源列表感兴趣,以进行更深入的潜水:

Kafka流的Kafka流视频101课程:Windowing

kafka流应用程序tutorial

ksqldb 101 course

流教程list

请参阅Event Aggregator pattern