您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關kafka的多分區watermark機制是怎么樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
watermark依賴的背景,可以是:
事件時間,必須要在事件時間這個概念之上理解watermark。
watermark更形象的理解可以理解為時間序列心跳吧,驅動流進行,而不是延遲時間,比如6s,這個不是watermark。
watermark就像心跳一樣,驅動著流程序基于事件時間進行處理,watermark之所以說類似于序列心跳,是因為它攜帶了時間戳 t。Watermark(t)意味著算子當前的事件時間已經到達了時間 t,任何時間戳小于t的事件都不會再發過來,也即是時間戳小于t的事件就應該丟棄了。
上面的可以說是針對單并行度的流,只有一個流水線,怎么著也玩不出彩來。watermark會在每個并行度的source處或者其他算子內部添加,然后繼續向前流動,假如流程序不存在shuffle那就沒啥好說的了,每個單獨的實例單獨進行,這個要想理解要結合前面的一篇文章:
結合Spark講一下Flink的runtime
存在shuffle的話,就是一個算子會存在多個輸入的話,當前事件時間就采用最小的事件時間。
kafkasource
kafka作為數據源的時候,假如消費的是多個topic或者多分區,那么由于分區消費是并行進行的,會打破數據在每個分區的數據性,這個是客戶端性質決定的,除非你是一個消費者對應于一個分區。這種情況下,可以使用
Kafka-partition-aware watermark生成器,該生成器會在每個kafka消費者內部,為每個分區生成watermark,最后每個分區的watermark會想Stream shuffle watermark的合并機制一樣合并。
代碼示例
FlinkKafkaConsumer09<MyType> kafkaSource = new FlinkKafkaConsumer09<>("myTopic", schema, props);
kafkaSource.assignTimestampsAndWatermarks(new AscendingTimestampExtractor<MyType>() {
@Override
public long extractAscendingTimestamp(MyType element) {
return element.eventTimestamp();
}
});
DataStream<MyType> stream = env.addSource(kafkaSource);
看完上述內容,你們對kafka的多分區watermark機制是怎么樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。