优化状态结构化流查询

管理有状态的中间状态信息结构化流查询可以帮助防止意想不到的延迟和生产问题。

使用多个状态运营商结构化流

在砖运行时的13.1及以上,砖提供先进的支持结构化流状态运营商工作负载。现在可以把多个状态操作串在一起,这意味着你可以养活一个操作的输出作为另一个窗口的聚合状态连接等操作。

您可以使用以下的示例将演示几个模式。

重要的

存在以下局限性在处理多个状态运营商:

  • FlatMapGroupWithState不支持。

  • 只支持附加的输出模式。

链接时间窗聚合

单词=#流DataFrame模式{时间戳:时间戳,词:字符串}#组数据窗口和词,计算每组的数量windowedCounts=单词groupBy(窗口(单词时间戳,“十分钟”,“5分钟”),单词)()#组由另一个窗口,窗口的数据的话,计算每组的数量anotherWindowedCounts=windowedCountsgroupBy(窗口(window_time(windowedCounts窗口),“1小时”),windowedCounts)()
进口火花值得一提的_瓦尔单词=/ /流DataFrame模式{时间戳:时间戳,词:字符串}/ /组数据窗口和词,计算每组的数量瓦尔windowedCounts=单词groupBy(窗口(美元“时间戳”,“十分钟”,“5分钟”),美元“单词”)。()/ /组由另一个窗口,窗口的数据的话,计算每组的数量瓦尔anotherWindowedCounts=windowedCountsgroupBy(窗口(美元“窗口”,“1小时”),美元“单词”)。()

时间窗口聚集在两个不同的流紧随其后加入stream-stream窗口

clicksWindow=clicksWithWatermarkgroupBy(clicksWithWatermarkclickAdId,窗口(clicksWithWatermarkclickTime,“1小时”))()impressionsWindow=impressionsWithWatermarkgroupBy(impressionsWithWatermarkimpressionAdId,窗口(impressionsWithWatermarkimpressionTime,“1小时”))()clicksWindow加入(impressionsWindow,“窗口”,“内心”)
瓦尔clicksWindow=clicksWithWatermarkgroupBy(窗口(“clickTime”,“1小时”))()瓦尔impressionsWindow=impressionsWithWatermarkgroupBy(窗口(“impressionTime”,“1小时”))()clicksWindow加入(impressionsWindow,“窗口”,“内心”)

Stream-stream时间间隔加入时间窗聚合紧随其后

加入=impressionsWithWatermark加入(clicksWithWatermark,expr(”“”clickAdId = impressionAdId和clickTime > = impressionTime和clickTime < = impressionTime +间隔1小时”“”),“leftOuter”#可以“内心”、“leftOuter”、“rightOuter”,“fullOuter”、“leftSemi”)加入groupBy(加入clickAdId,窗口(加入clickTime,“1小时”))()
瓦尔加入=impressionsWithWatermark加入(clicksWithWatermark,expr(”“”clickAdId = impressionAdId和clickTime > = impressionTime和clickTime < = impressionTime +间隔1小时”“”),joinType=“leftOuter”/ /可以“内心”、“leftOuter”、“rightOuter”,“fullOuter”、“leftSemi”)加入groupBy(美元“clickAdId”,窗口(美元“clickTime”,“1小时”))()

阻止减缓垃圾收集(GC)暂停状态流

如果你有状态操作流查询(如流聚合)和你想维护数以百万计的键的状态,那么你可能会面临相关问题大型JVM的垃圾收集(GC)暂停。这将导致高micro-batch处理时间的变化。这是因为你的JVM的内存维护默认状态数据。有大量的状态对象会压迫你的JVM内存,导致高GC暂停。

在这种情况下,您可以选择使用一个更优化的基于状态管理解决方案RocksDB。这个解决方案可以在砖运行时。JVM内存而不是保持状态,这个解决方案使用RocksDB本机内存中有效地管理国家和当地的SSD(例如类型与当地SSD)。此外,任何更改到这个状态是由结构化流到检查点位置自动保存你已经提供,因此提供完整的容错担保(默认状态管理)一样。为指令配置RocksDB国家商店,看到的配置RocksDB状态存储在砖