【问题标题】:How to process a message without message leaving the queue till a condition is met?如何处理没有消息离开队列直到满足条件的消息?
【发布时间】:2017-03-14 16:29:23
【问题描述】:
这是关于我计划通过 flink 流解决的特定用例。
一条消息被发送到 flink 流处理,流被 keyed 并因此被按预期分区。但是,每个键的每条消息都需要评估,直到满足条件,例如假设有一个银行系统,其中一个帐户的帐户交易(消息)需要按顺序处理,并且不可能乱序处理消息,因为它会导致系统状态不一致。系统需要等待一条消息被处理(甚至可能超过 2-3 天),然后才能按顺序处理下一条消息。如何在 flink 中实现这一点,而不阻塞可以与其他键关联的消息处理的任何部分?
提前致谢!
【问题讨论】:
标签:
apache-flink
flink-streaming
【解决方案1】:
您看过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();
}
});