Flink Kafka连接器 - 提交偏移而不检查点

时间:2016-10-05 13:31:41

标签: apache-kafka apache-flink

我对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发送重复数据,并且重新读取最后5分钟的间隔不会产生任何开销。

基本上我有两个问题:

  1. 有没有办法实现关闭检查点 并且只提交如上所述的偏移量?

  2. 如果没有,有什么方法可以将检查点与开头对齐 窗户 ?我阅读了flink文档 - 有一个叫做的功能 保存点(即手动检查点),但它是要使用的 从命令行。我需要从代码中调用savepoint 窗口启动 - 状态将很小并且检查点进程将是 快。

0 个答案:

没有答案