>我有以下 CEP 模式流,其中数据流根据实体 ID 进行分区,因为我只对实体具有相同实体 ID 的模式匹配感兴趣:
PatternStream<EntityMetric> patternStream = CEP.pattern(inputStream.keyBy(EntityMetric.ATTR_ENTITY_ID), thresholdPattern);
但后来我注意到检查点状态大小随着实体 ID 数量的增加而增加。如果我正确理解检查点,这是意料之中的,因为操作员状态的数量会增加。但是我想找出是否有任何其他方法可以最小化检查点状态大小。
是否有其他方法可以实现此模式匹配,而无需根据实体 ID 对数据流进行分区?
是否有其他技术或配置属性可以帮助减小检查点状态大小?
谢谢!
你的问题没有一个简单的答案。首先,您要最小化的状态的大小是多少?
状态的大小随着实体 ID 的数量而增加并不完全正确,而是随着找到的部分匹配项的数量而增加。如果某些 ID 没有部分匹配,则不会增加状态的大小。因此,我建议您坚持使用KeyedStream
。
使用 FlinkCEP 时,不要留下一些悬而未决的状态非常重要,这些状态可以通过例如 followedByAny
或 zeroOrMore
创建。避免离开悬空状态的最简单方法是使用within
模式设置时间限制,这样所有超时的模式都将被修剪。另一种可能性是使用确定性连续性,如next
或followedBy
,并对循环模式使用until
条件。