在满足条件之前,如何处理消息而不让消息离开队列?

n8ghc7c1  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(322)

这是关于一个特定的用例,我计划通过flink流处理。
一条消息被发送到flink流处理,流被键控,从而按预期进行分区。但是,每个密钥的每条消息都需要评估,直到满足一个条件为止,例如,假设有一个银行系统,其中一个帐户的帐户事务(消息)需要按顺序处理,并且不可能按顺序处理消息,因为这将导致系统状态不一致。在按顺序处理下一条消息之前,系统需要等待消息被处理(甚至可能超过2-3天)。如何在flink中实现这一点而不阻塞与其他密钥相关的消息处理的任何部分?
提前谢谢!

balp4ylt

balp4ylt1#

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

相关问题