Flink单并行度消费kafka触发窗口计算问题
基本信息
flink版本1.11
问题:flink上游数据源为kafka,topic有10个分区,在flink单并行度消费该topic进行窗口统计,job稳定运行统计数据差异不明显,如果job异常,进行重启,消费积压数据进行窗口统计,发现数据异常。
排查:由于上游topic数据为埋点,时间格式比较乱,怀疑flink在单并行度消费多partition的kafka topic情况下,即时产生waterMark,并触发窗口计算,这样会导致剩余partition中属于该窗口的数据被认为延迟数据。
验证:
为测试,创建一个topic:partition_test_2,2个partition

生产者发送消息:
topic partition-1分区始终为2021-07-02 15:00:14
partition-0分区每分钟更新为最新时间
while (true) {
producer.send(new ProducerRecord<>(topic, "1", "{\"time\":\"1625209214978\",\"uid\":\"529eb9bb421aa97f9abcb45f\"}"));
producer.send(new ProducerRecord<>(topic, "0", "{\"time\":\""+System.currentTimeMillis()+"\",\"uid\":\"529eb9bb421aa97f9abcb45f\"}"));
producer.flush();
try {
Thread.sleep(1000 * 60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
窗口统计代码(并行度设为1):
public static void main(String[] args) {
try {
StreamExecutionEnviroment env = new StreamExecutionEnviroment(args);
env.setStreamTimeCharacteristic(TimeCharacteristic
Flink单并行度消费Kafka的延迟数据处理挑战

最低0.47元/天 解锁文章
3136

被折叠的 条评论
为什么被折叠?



