Apache flink Flink CEP事件未触发

Apache flink Flink CEP事件未触发,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我已经在Flink中实现了CEP模式,该模式与本地Kafka经纪人的连接正常工作。但当我连接到基于集群的云卡夫卡设置时,Flink CEP不会触发 final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); //saves checkpoint env.getCheckpointConfig().enableExternalizedCheckpoints(

我已经在Flink中实现了CEP模式,该模式与本地Kafka经纪人的连接正常工作。但当我连接到基于集群的云卡夫卡设置时,Flink CEP不会触发

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    //saves checkpoint
    env.getCheckpointConfig().enableExternalizedCheckpoints(
            CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
我正在使用AscendingTimestampExtractor

consumer.assignTimestampsAndWatermarks(
    new AscendingTimestampExtractor<ObjectNode>() {
      @Override
      public long extractAscendingTimestamp(ObjectNode objectNode) {
        long timestamp;
        Instant instant = Instant.parse(objectNode.get("value").get("timestamp").asText());
        timestamp = instant.toEpochMilli();
        return timestamp;
      }
    });
consumer.com和水印(
新AscendingTimestampExtractor(){
@凌驾
公共长提取AscendingTimeStamp(ObjectNode ObjectNode){
长时间戳;
Instant Instant=Instant.parse(objectNode.get(“value”).get(“timestamp”).astex());
timestamp=instant.toEpochMilli();
返回时间戳;
}
});
我也收到了警告信息

AscendingTimestampExtractor:140-违反时间戳单调性:1594017872227<1594017873133

我还尝试过使用带有周期性水印的AssignerWithPeriodicWatermarks和带有标点水印的AssignerWithPeriodicWatermarks,但都不起作用

我附上了Flink控制台截图,其中水印未指定。


有人能帮忙吗?

CEP必须首先对输入流进行排序,这是基于水印的。所以 问题可能与水印有关,但您还没有向我们展示足够的信息来调试原因。一个常见的问题是有一个可以阻止水印前进的

但还有其他可能的原因。为了调试这种情况,我建议您查看一些指标,可以在FlinkWebUI中,也可以在一个指标系统中(如果您连接了一个指标系统的话)。首先,通过查看管道不同阶段的
numRecordsIn
numRecordsOut
numRecordsInPerSecond
numRecordsOutPerSecond
检查记录是否在流动

如果存在事件,请在作业的不同任务中查看
currentOutputWatermark
,查看事件时间是否提前

更新:


您可能正在Kafka使用者上调用
assignTimestampsAndWatermarks
,这将导致每个分区的水印。在这种情况下,如果您有一个空闲分区,该分区将不会产生任何水印,这将保留整个水印。尝试在源代码生成的数据流上调用
assignTimestampsAndWatermarks
,看看这是否解决了问题。(当然,如果没有逐分区水印,您将无法使用AscendingTimestampExtractor,因为流将不有序。)

由于并行度为1,问题不是空闲源。我们能看到整个工作图表吗?CEP之后会发生什么?@DavidAnderson谢谢你的回复。在CEP之后,没有块,我们只是以json格式记录匹配的事件。我已经更新了flink控制台屏幕截图。但是,当将所有内容移动到集群时,预期本地设置工作的jar会出现同样的问题。我怀疑您的问题是由于在空闲分区中使用每个分区水印造成的。@DavidAnderson谢谢。。!现在可以了。卡夫卡集群中的理想分区问题导致了这种情况issue@DavidAndersonThanks请回答。这真的很有帮助。