flink 不设置水印_一文搞懂 Flink 处理水印全过程

本文深入探讨了Flink处理水印的过程,以Flink消费Kafka为例,展示了如何使用assignTimestampsAndWatermarks设置水印,以及PeriodicWatermarkEmitter如何周期性发送水印。在Flink中,水印的处理确保了事件时间的正确处理,特别是在处理乱序事件时。文章还介绍了下游算子如何接收并处理水印,以及水印在窗口操作中的作用。
摘要由CSDN通过智能技术生成

1.正文

前面,我们已经学过了 一文搞懂 Flink 处理 Barrier 全过程,今天我们一起来看一下 flink 是如何处理水印的,以 Flink 消费 kafka 为例

FlinkKafkaConsumer consumer = new FlinkKafkaConsumer(topics, new SimpleStringSchema(), properties);

consumer.setStartFromLatest();

consumer.assignTimestampsAndWatermarks(new AscendingTimestampExtractor() {

@Override

public long extractAscendingTimestamp(String element) {

String locTime = "";

try {

Map map = Json2Others.json2map(element);

locTime = map.get("locTime").toString();

} catch (IOException e) {

}

LocalDateTime startDateTime =

LocalDateTime.parse(locTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

long milli = startDateTime.toInstant(OffsetDateTime.now().getOffset()).toEpochMilli();

return milli;

}

});

通过 assignTimestampsAndWatermarks 来对 watermarksPeriodic 进行赋值,当 KafkaFetcher ( 关于 KafkaFetcher 可以参考 写给大忙人看的Flink 消费 Kafka) 在初始化的时候,会创建 PeriodicWatermarkEmitter

// if we have periodic watermarks, kick off the interval scheduler

// 在构建 fetcher 的时候创建 PeriodicWatermarkEmitter 并启动,以周期性发送

if (timestampWatermarkMode == PERIODIC_WATERMARKS) {

@SuppressWarnings("unchecked")

PeriodicWatermarkEmitter periodicEmitter = new PeriodicWatermarkEmitter(

subscribedPartitionStates,

sourceContext,

processingTimeProvider,

autoWatermarkInterval);

periodicEmitter.start();

}

PeriodicWatermarkEmitter 主要的作用就是周期性的发送 watermark,默认周期是 200 ms,通过 env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); 指定。

@Override

//每隔 interval 时间会调用此方法

public void onProcessingTime(long timestamp) throws Exception {

long minAcrossAll = Long.MAX_VALUE;

boolean isEffectiveMinAggregation = false;

for (KafkaTopicPartitionState> state : allPartitions) {

// we access the current watermark for the pe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值