这是关于我打算通过Flink流媒体解决的特定用例。
一条消息发送到Flink Stream处理,该流是由钥匙键入的,因此按预期进行了分区。但是,每个密钥都需要评估的每条消息,直到满足条件,例如假设有一个银行系统,其中需要按顺序处理帐户的帐户交易(消息),并且不可能处理序列的消息,因为它会导致不一致的系统状态。系统需要等待一条消息(甚至超过2-3天),然后再处理下一条消息。在Flink中如何实现这一点,而不会阻止可以与其他密钥关联的消息处理的任何部分?
预先感谢!
您是否看过CEP库?您可以指定一个模式:
Pattern<Event, ?> pattern = Pattern.<Event>begin("firstOfSequence").where(new FilterFunction<Event>() {
private static final long serialVersionUID = 5726188262756267490L;
@Override
public boolean filter(Event value) throws Exception {
return value.isFirstOfSequence();
}
}).followedBy("secondOfSequence").where(new FilterFunction<Event>() {
private static final long serialVersionUID = 5726188262756267490L;
@Override
public boolean filter(Event value) throws Exception {
return value.isSecondOfSequence();
}
});