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

How to minimize Flink checkpoint state size

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

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

但后来我注意到检查点状态大小随着实体 ID 数量的增加而增加。如果我正确理解检查点,这是预料之中的,因为操作员状态的数量增加了。但是我想知道是否有任何其他方法可以最小化检查点状态大小。

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

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

谢谢!

您的问题没有简单的答案。首先,您想最小化的状态大小是多少?

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

对于 FlinkCEP,不要留下一些悬空状态非常重要,这些悬空状态可以在通过 followedByAnyzeroOrMore。避免留下悬空状态的最简单方法是使用 within 设置模式的时间限制,这样所有超时的模式都将被修剪。另一种可能性是使用确定性连续性,如 nextfollowedBy,并在循环模式上使用 until 条件。