如何在没有消息离开队列直到满足条件的情况下处理消息?

时间:2017-03-14 16:29:23

标签: apache-flink flink-streaming

这是关于我计划通过flink流处理的特定用例。

将消息发送到flink流处理,流被键入,因此按预期进行分区。然而,每个密钥的每个消息需要被评估直到满足条件,例如,假设有一个银行系统,其中一个帐户的帐户交易(消息)需要按顺序处理,并且不可能不按顺序处理消息,因为它会导致系统状态不一致。在按顺序处理下一条消息之前,系统需要等待处理消息(可能甚至超过2-3天)。如何在flink中实现这一点,而不会阻止任何与其他键相关的消息处理部分?

提前致谢!

1 个答案:

答案 0 :(得分:0)

你看过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();
    }
});