如何最小化Flink检查点状态大小

时间:2018-03-06 19:34:45

标签: apache-flink flink-streaming flink-cep

我有以下CEP PatternStream,其中DataStream是根据实体ID进行分区的,因为如果实体具有相同的实体ID,我只对模式匹配感兴趣:

PatternStream<EntityMetric> patternStream = CEP.pattern(inputStream.keyBy(EntityMetric.ATTR_ENTITY_ID), thresholdPattern);

但随后我注意到检查点状态大小随着实体ID数量的增加而增加。如果我正确理解了检查点,那么这是预期的,因为运营商状态的数量会增加。但我想知道是否有任何其他方法可以最小化检查点状态大小。

  1. 是否有不同的方法来实现此模式匹配而不根据实体ID对DataStream进行分区?

  2. 是否有其他技术或配置属性可以帮助减少检查点状态大小?

  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

你的问题没有一个简单的答案。首先,您希望最小化的州的大小是多少?

状态的大小随实体ID的数量增加并不完全正确,但它随着找到的部分匹配的数量而增加。如果某些ID没有部分匹配,则不会增加状态的大小。 因此,我建议你坚持使用KeyedStream

使用FlinkCEP时,不要留下一些可以创建的悬空状态是非常重要的。 followedByAnyzeroOrMore。避免离开悬空状态的最简单方法是使用within设置模式的时间限制,这样就可以修剪所有带时间的模式。其他可能性是使用确定性连续性,如nextfollowedBy,并在循环模式上使用until条件。