【问题标题】:How can I create dynamic rule in apache-flink?如何在 apache-flink 中创建动态规则?
【发布时间】:2020-07-29 11:30:33
【问题描述】:

我将 flink 与 Java 一起使用,并成功定义了一个静态模式,如下所示:

Pattern<Event, ?> pattern = Pattern.<Event>
            begin("first")
            .where(
                    new SimpleCondition<Event>() {
                        @Override
                            public boolean filter(Event event) {
                            return event.getTemperature() > 50;
                         }
                    }).within(Time.seconds(10L));

apache-flink 中是否有办法以动态方式创建模式? 我需要根据用户的输入定义模式。

谢谢

【问题讨论】:

  • 在这种情况下用户输入是 DataStream 吗?或者只是传递给作业的参数?
  • 用户的输入是我建立条件所需的输入。据我了解,数据流将是事件本身
  • 那么你将如何获得用户的输入呢?
  • 我们将通过 REST 调用获取用户的输入,例如使用定义条件的 JSON POST /createRule。

标签: java apache-flink


【解决方案1】:

您可能对“Dynamic Updates of Application Logic”模式感兴趣。

将 BroadcastStream 用于您 connect 到流的规则。

通过文章中的示例,您甚至可以拥有动态聚合定义:

// Streams setup
DataStream<Transaction> transactions = [...]
DataStream<Rule> rulesUpdateStream = [...]

BroadcastStream<Rule> rulesStream = rulesUpdateStream.broadcast(RULES_STATE_DESCRIPTOR);

// Processing pipeline setup
 DataStream<Alert> alerts =
     transactions
         .connect(rulesStream)
         .process(new DynamicKeyFunction())
         .keyBy((keyed) -> keyed.getKey())
         .connect(rulesStream)
         .process(new DynamicAlertFunction())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多