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

标签 apache-flink flink-streaming

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

Since Apache Kafka 0.10+, Kafka’s messages can carry timestamps, indicating the time the event has occurred (see “event time” in Apache Flink) or the time when the message has been written to the Kafka broker.

The FlinkKafkaConsumer010 will emit records with the timestamp attached, if the time characteristic in Flink is set to TimeCharacteristic.EventTime (StreamExecutionEnvironment.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)).

The Kafka consumer does not emit watermarks.

我想到了一些问题:

  1. 我如何知道所采用的时间戳是发生的时间还是写入 Kafka 代理的时间?

  2. 如果消费者不发出水印并且设置了TimeCharacteristic.EventTime,这是否意味着晚几天的消息仍然可以进入并被处理?

  3. 主流程图不包含窗口函数,基本上如下所示:source(kafka)->filter->processFunction->Sink。这是否意味着事件在被 Kafka 连接器使用时被触发?

  4. 我目前使用 Kafka 连接器 0.10.0、TimeCharacteristic.EventTime 设置并使用 processFunction,预计每 X 分钟就会进行一些状态清理。 然而,我遇到了一个奇怪的情况,其中 OnTimerContext 包含从 0 开始的时间戳,并在我启动 flink 程序时增长到当前时间戳,这很奇怪,这是一个错误吗?

提前感谢所有帮助者!

最佳答案

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

关于apache-flink - Flink Kafka 连接器 0.10.0 事件时间澄清和 ProcessFunction 澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45984238/

相关文章:

apache-flink - 带有状态处理器 api 的 Flink 状态后端配置

java - 弗林克 : Cluster Execution error of loss of Taskmanager

apache-flink - 为什么 Apache Flink 需要 Watermarks 来进行事件时间处理?

unit-testing - 为 Flink SQL 添加单元测试

apache-flink - Flink 在所有任务管理器之间均匀分配所需的槽

resources - Apache 弗林克 : Limit number of CPUs in a TaskManager

scala - 使用 scala 在 Flink 中进行实时流预测

java - 使用 RestClusterClient 在 Flink 集群上运行已部署的作业

java - Apache Flink 中的默认检查点保存在哪里?

java - 如何根据状态变化事件分布式统计flink有多少 "clients"状态?我需要有状态的对象