Flink Kafka连接器0.10.0事件时间澄清和ProcessFunction澄清

时间:2017-08-31 14:42:46

标签: apache-flink flink-streaming

我正在努力解决有关flink的卡夫卡消费者连接器事件时间的问题。 引用Flink doc

  

自Apache Kafka 0.10 +以来,Kafka的消息可以携带时间戳,指示事件发生的时间(请参阅Apache Flink中的“事件时间”)或消息写入Kafka代理的时间。

     

如果Flink中的时间特性设置为TimeCharacteristic.EventTime(StreamExecutionEnvironment.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)),FlinkKafkaConsumer010将发出附加时间戳的记录。

     

Kafka消费者不会发出水印。

我想到了一些问题和问题:

  1. 我如何知道所采用的时间戳是发生时间还是写入Kafka经纪人的时间?
  2. 如果消费者没有发出水印并且设置了TimeCharacteristic.EventTime,这是否意味着延迟几天的消息仍然可以进入并被处理?
  3. 主流程图不包含窗口函数,基本上如下所示:source(kafka) - > filter-> processFunction-> Sink。这是否意味着事件在Kafka连接器消耗时被触发?

  4. 我目前使用Kafka连接器0.10.0,TimeCharacteristic.EventTime设置并使用一个processFunction,每隔一段时间X min会进行一次状态清理。 但是我收到一个奇怪的情况,其中OnTimerContext包含从0开始的时间戳,并且在我启动flink程序时增长到当前时间戳并且很奇怪,这是一个错误吗?

  5. 提前感谢所有帮助者!

1 个答案:

答案 0 :(得分:2)

  1. 这取决于创建这些事件的Kafka制作人的配置。 message.timestamp.type属性应设置为CreateTime或LogAppendTime。
  2. 您的flink应用程序负责创建水印;卡夫卡消费者将负责时间戳,但不会处理水印。无论事件有多晚,它仍然会进入您的管道。
  3. 我不清楚这部分是多么奇怪。