【问题标题】: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();
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 2020-02-17
      • 2023-02-10
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2015-06-18
      • 1970-01-01
      相关资源
      最近更新 更多