前情提要:前两期研究如何定义个体模式和模式组的各种配置、链接,这期的目的是研究如何执行匹配的。
转载注明原作者:xiaozoom
转载博客地址:xiaozoom的csdn博客
xiaozoom的博客_优快云博客-flinkCDC,数据同步,Flink领域博主
如何执行模式匹配
官网的解释是这样的:
DataStream<Event> input = ...
Pattern<Event, ?> pattern = ...
EventComparator<Event> comparator = ... // optional
PatternStream<Event> patternStream = CEP.pattern(input, pattern, comparator);
需要:
- 一个事件源 input
- 定义好的模式(不论个体还是模式组)
- 用于在事件的TimeStamp相同时进行排序的EventComparator
- 定义方法:CEP.pattern
由于要执行存在验证是否连续的关系,很自然的会将parallelism强制设为1。input源不区分keyed和non-keyed。但是如果对non-keyed适用,可能会变成性能瓶颈。
因此,尽可能的在应用CEP之前,先用Key进行分流。
因此本期涉及到的类主要要:
-
org.apache.flink.cep.CEP
-
org.apache.flink.cep.PatternStream<T>
public class CEP {
/**
* Creates a {@link PatternStream} from an input data stream and a pattern.
*
* @param input DataStream containing the input events
* @param pattern Pattern specification which shall be detected
* @param <T> Type of the input events
* @return Resulting pattern stream
*/
public static <T> PatternStream<T> pattern(DataStream<T> input, Pattern<T, ?> pattern) {
return new PatternStream<>(input, pattern);
}
/**
* Creates a {@link PatternStream} from an input data stream and a pattern.
*
* @param input DataStream containing the input events
* @param pattern Pattern specification which shall be detected
* @param comparator Comparator to sort events with equal timestamps
* @param <T> Type of the input events
* @return Resulting pattern stream
*/
public static <T> PatternStream<T> pattern(
DataStream<T> input, Pattern<T, ?> pattern, EventComparator<T> comparator) {
final PatternStream<T> stream = new PatternStream<>(input, pattern);
return stream.withComparator(comparator);
}
}
从简短的源代码,不难看出CEP只是定义好的入口类,真正需要研究还得看PatternStream类。
PatternStream类,没有继承任何超类,可以看出在代码层级中是属于比较底层的了。
基本的定义区:
private final PatternStreamBuilder<T> builder;
private PatternStream(final PatternStreamBuilder<T> builder) {
this.builder = checkNotNull(builder);
}
PatternStream(final DataStream<T> inputStream, final Pattern<T, ?> pattern) {
this(PatternStreamBuilder.forStreamAndPattern(inputStream, pattern));
}
PatternStream<T> withComparator(final EventComparator<T> comparator) {
return new PatternStream<>(builder.withComparator(comparator));
}
public PatternStream<T> sideOutputLateData(OutputTag<T> lateDataOutputTag) {
return new PatternStream<>(builder.withLateDataOutputTag(lateDataOutputTag));
}
时间语义设定:
/** Sets the time characteristic to processing time. */
public PatternStream<T> inProcessingTime() {
return new PatternStream&l

本文深入探讨Apache Flink的复杂事件处理(CEP)模块,详细解析如何执行模式匹配,包括事件源、模式定义、时间语义设定以及PatternStream的关键方法。通过实例代码展示了如何配置和使用CEP进行模式检测,并讨论了匹配过程中的时间管理和性能优化。同时,文章指出在EventTime模式下需手动设置水印以避免无结果的情况,并提供了处理超时匹配的解决方案。
最低0.47元/天 解锁文章
1535

被折叠的 条评论
为什么被折叠?



