Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink ApacheFlinkCEP在侦听RMQSource之前初始化输入数据流_Apache Flink_Flink Streaming_Flink Cep - Fatal编程技术网

Apache flink ApacheFlinkCEP在侦听RMQSource之前初始化输入数据流

Apache flink ApacheFlinkCEP在侦听RMQSource之前初始化输入数据流,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我正在使用Flink 1.2 CEP检测设备中丢失的心跳事件。我从RabbitMQ源中读取心跳事件,并使用以下模式通过超时函数检测由序列号键入的设备丢失的心跳 此模式流适用于设备发送至少一次心跳的情况。但我还需要处理检测应用程序启动后甚至没有启动一次心跳的设备的缺失心跳的用例 为此,我需要使用所有设备init heart beat event初始化输入心跳流。如果我初始化流,这将照顾那些没有接收到第一次心跳的设备,也会超时并发出警报 即使在从RMQSource函数侦听之前,如何使用所有设备的in

我正在使用Flink 1.2 CEP检测设备中丢失的心跳事件。我从RabbitMQ源中读取心跳事件,并使用以下模式通过超时函数检测由序列号键入的设备丢失的心跳

此模式流适用于设备发送至少一次心跳的情况。但我还需要处理检测应用程序启动后甚至没有启动一次心跳的设备的缺失心跳的用例

为此,我需要使用所有设备init heart beat event初始化输入心跳流。如果我初始化流,这将照顾那些没有接收到第一次心跳的设备,也会超时并发出警报

即使在从RMQSource函数侦听之前,如何使用所有设备的init心跳数据初始化数据流

//Reading heart beat of device from RabbitMQ queue
DataStream<HeartBeatEvent> heartBeatStream= 
    env.addSource(rmqSource).assignTimestampsAndWatermarks(new 
           IngestionTimeExtractor<String>());                                   

//Pattern to detect missing heartbeat
Pattern<HeartBeanEvent, ?> heartBeatEventPattern = Pattern.< 
          HeartBeanEvent >begin("first")
            .subtype(HeartBeanEvent.class)
            .next("second")
            .subtype(HeartBeanEvent.class)
            .within(Time.seconds(360));

DataStream<Either< HeartBeanEvent, String>> result = 
     CEP.pattern(heartBeatStream.keyBy(serialNum), 
                 heartBeatEventPattern).
  select(new PatternTimeoutFunction< HeartBeanEvent, HeartBeanEvent >() {
            public HeartBeanEvent timeout(Map<String, HeartBeanEvent > 
                   pattern, long timeoutTimestamp) throws Exception {
   System.out.println("Missing heart beat:" + 
           pattern.get("first").getSerialNum() + ":" + 
           pattern.get("first").getEventTime());  
           return pattern.get("first");
            }
    },new PatternSelectFunction< HeartBeanEvent, String>() {
            public String select(Map<String, HeartBeanEvent > pattern) {                     
                return null;
            }
        });
//从RabbitMQ队列读取设备的心跳
数据流heartBeatStream=
env.addSource(rmqSource).assignTimestampsAndWatermarks(新)
InjectionTimeExtractor());
//检测丢失心跳的模式
模式heartBeatEventPattern=模式
HeartBeanEvent>开始(“第一次”)
.subtype(HeartBeanEvent.class)
.下一个(“第二个”)
.subtype(HeartBeanEvent.class)
.在(时间.秒(360))内;
数据流>结果=
CEP.模式(heartBeatStream.keyBy(serialNum),
心跳模式)。
选择(新模式TimeOutFunction(){
public HeartBeanEvent超时(映射
模式,long-timeoutTimestamp)引发异常{
System.out.println(“心跳缺失:”+
pattern.get(“first”).getSerialNum()+:“+
pattern.get(“first”).getEventTime();
返回模式。获取(“第一”);
}
},新的PatternSelectFunction(){
公共字符串选择(映射模式){
返回null;
}
});

如果您事先知道所有设备可能都是,您可以在同一队列中发送所有心跳,但在设备最初发送心跳之前。或者启动另一个数据流并将其与rabbitmq源流连接,因为您可以控制自己的初始化流,在任何事情发生之前发送数据?是的,我正在初始化数据流中的清单设备并将其与rabbitmq连接。源流。