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

Apache flink 如何最小化Flink检查点状态大小,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我有以下CEP PatternStream,其中数据流基于实体ID进行分区,因为我只对实体具有相同实体ID的模式匹配感兴趣: PatternStream<EntityMetric> patternStream = CEP.pattern(inputStream.keyBy(EntityMetric.ATTR_ENTITY_ID), thresholdPattern); PatternStream PatternStream=CEP.pattern(inputStream.keyBy

我有以下CEP PatternStream,其中数据流基于实体ID进行分区,因为我只对实体具有相同实体ID的模式匹配感兴趣:

PatternStream<EntityMetric> patternStream = CEP.pattern(inputStream.keyBy(EntityMetric.ATTR_ENTITY_ID), thresholdPattern);
PatternStream PatternStream=CEP.pattern(inputStream.keyBy(EntityMetric.ATTR\u ENTITY\u ID),thresholdPattern);
但是我注意到,检查点状态的大小随着实体ID数量的增加而增加。如果我正确理解检查点,那么这是可以预料的,因为操作符状态的数量增加了。但是我想知道是否有其他方法可以最小化检查点状态大小

  • 是否有其他方法可以实现这种模式匹配,而无需基于实体ID对数据流进行分区

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


  • 谢谢

    你的问题没有一个简单的答案。首先,要最小化的状态大小是多少

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

    使用FlinkCEP时,重要的是不要留下一些悬空状态,这些状态可以通过
    followerdbyany
    zero或more
    创建。避免离开悬空状态的最简单方法是为
    范围内的模式设置时间限制,这样所有超时模式都将被删除。另一种可能性是使用确定性连续性,如
    next
    followedBy
    ,并在循环模式上使用
    ,直到
    条件