flink左内连接Java,Flink Kafka连接器 - 提交偏移量而不检查点

我对Flink Kafka Consumer(FlinkKafkaConsumer09)有疑问 . 我一直在使用这个版本的连接器:flink-connector-kafka-0.9_2.11-1.1.2(连接器版本是0.9,akka版本是2.11,flink版本是1.1.2)

我在5分钟的翻滚窗口内收集来自kafka的通信数据 . 从我所看到的,窗口与系统时间对齐(例如窗口在12:45,12:50,12:55,13:00等结束)窗口关闭后,其记录被处理/聚合,通过Sink运算符发送到数据库 .

我的程序的简化版本:

env.addSource(new FlinkKafkaConsumer09<>(topicName,jsonMapper, properties))

.keyBy("srcIp", "dstIp", "dstPort")

.window(TumblingEventTimeWindows.of(Time.of(5, TimeUnit.MINUTES)))

.apply(new CounterSum<>())

.addSink(new DbSink(...));

但是我需要在kafka中提交偏移量 . 根据我的阅读,FlinkKafkaConsumer09中唯一的方法是打开检查点 . 我是这样做的:

env.enableCheckpointing(300000); // 5 minutes

检查点存储所有运营商的状态 . 检查点完成后,偏移量将被发送到kafka . 我的检查点通过任务管理器系统文件结构中的FsStateBackend存储(第一个问题 - 旧的检查点数据未被删除,我看到了一些错误报告) . 第二个问题是触发检查点 . 如果在窗口开始时触发,结果检查点文件很小,另一边在窗口关闭之前触发时,结果状态很大(例如50MB),因为此窗口中已有很多通信记录 . 检查点过程通常需要不到1-2秒,但是当窗口关闭后以及处理聚合和数据库接收时触发检查点时,检查点过程需要45秒 .

但重点是我根本不需要国家检查点 . 我需要的是在窗口关闭后将偏移量提交给kafka,处理并将结果数据下沉到db(或在另一个窗口的开头) . 如果发生故障转移,flink将从kafka获取最后一个偏移量,并将再次读取最后5分钟间隔的数据 . 由于上次失败的结果未发送到db,因此不会向DB发送重复数据,并且重新读取最后5分钟的间隔不会产生任何开销 .

所以基本上我有两个问题:

有没有办法如何实现检查点关闭,只提交如上所述的偏移量?

如果没有,有没有办法如何将检查点与窗口的开始对齐?我阅读了flink文档 - 有一个称为保存点(即手动检查点)的功能,但它可以在命令行中使用 . 我需要在窗口启动时从代码中调用savepoint - 状态会很小并且检查点进程会很快 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值