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