2017-08-31 36 views
1

我正在努力解決flink的卡夫卡用戶連接器的事件時間問題。 援引Flink docFlink卡夫卡連接器0.10.0事件時間澄清和處理功能澄清

因爲Apache卡夫卡0.10+,卡夫卡的消息可以攜帶的時間戳,表示當該消息已被寫入到卡夫卡該事件已經發生(參見阿帕奇弗林克「事件時間」)的時刻或時間經紀人。

如果Flink中的時間特徵設置爲TimeCharacteristic.EventTime(StreamExecutionEnvironment.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)),則FlinkKafkaConsumer010將發出附帶時間戳記的記錄。

卡夫卡消費者不會發出水印。

一些疑問和問題浮現在腦海中:

  1. 我怎麼知道,如果它採取了時間戳的寫入卡夫卡經紀人它發生的時間或時間?
  2. 如果消費者不發射水印並且TimeCharacteristic.EventTime被設置,這是否意味着一條消息遲到幾天仍然可以進入並被處理?
  3. 主流程圖不包含窗口函數,基本如下所示:source(kafka) - > filter-> processFunction-> Sink。這是否意味着該事件在被卡夫卡連接器消耗的時刻被解僱?

  4. 我目前使用卡夫卡連接器0.10.0,TimeCharacteristic.EventTime設置並使用processFunction,每X分鐘做一些狀態清理。 但是,我收到一個奇怪的情況,其中OnTimerContext包含時間戳從0開始,直到當前時間戳,當我啓動flink程序並且很奇怪,這是一個錯誤嗎?

在此先感謝所有幫手!

回答

0
  1. 這取決於創建這些事件的卡夫卡生產者的配置。 message.timestamp.type屬性應該設置爲CreateTime或LogAppendTime。
  2. 您的flink應用程序負責創建水印;卡夫卡消費者會照顧時間戳,而不是水印。無論事件晚了,它都會進入你的管道。
  3. 是的。
  4. 我不清楚這是什麼奇怪的部分。