我有以下cep patternstream,其中数据流基于实体id进行分区,因为我只对实体具有相同实体id时的模式匹配感兴趣:
PatternStream<EntityMetric> patternStream = CEP.pattern(inputStream.keyBy(EntityMetric.ATTR_ENTITY_ID), thresholdPattern);
但是后来我注意到检查点状态的大小随着实体id数量的增加而增加。如果我正确理解检查点,那么这是意料之中的,因为操作符状态的数量增加了。但是我想知道是否有其他方法可以最小化检查点状态大小。
有没有一种不同的方法来实现这种模式匹配而不基于实体id对数据流进行分区?
是否有其他技术或配置属性可以帮助减少检查点状态大小?
谢谢!
1条答案
按热度按时间goqiplq21#
你的问题没有一个简单的答案。首先,要最小化的状态大小是多少?
状态的大小随着实体id的数量而增加并不完全正确,而是随着找到的部分匹配的数量而增加。如果某些ID没有部分匹配,它们就不会增加状态的大小。因此我建议你坚持使用
KeyedStream
.对于flinkcep来说,不要留下一些悬空状态是非常重要的,例如
followedByAny
或者zeroOrMore
. 避免离开悬空状态的最简单方法是为具有within
这样所有超时的模式都将被删除。另一种可能性是使用确定性的连续性,比如next
或者followedBy
使用until
循环模式的条件。