在写入Cassandra的Flink作业中使用检查点时,如果由于连接问题导致此写入失败,则作业将失败并在特定时间间隔后重新启动。
这项工作从记录失败时开始?它是选择要处理的下一条记录还是重置偏移并尝试重新处理失败的记录?
我的检查点配置如下所示,
try{
env.setStateBackend(new RocksDBStateBackend(props.getFlinkCheckpointDataUri(), true));
env.enableCheckpointing(10000, EXACTLY_ONCE); //10 seconds
CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
}
catch(Exception e){
System.out.println("Failed to prepare stream execution environment");
}
答案 0 :(得分:1)
如果启用了检查点,Flink保证Cassandra接收器至少一次交付(如果您对C *实例的更新请求是幂等的,则确切地说一次;意味着可以多次应用更新而不更改结果)[{{3} }]。换句话说,如果记录无法执行,则不会提交包含这些记录的快照的检查点。因此,将完全重试失败检查点的记录。
这是有效的,因为Cassandra接收器有一个检查点提交器,可以在某些资源中存储有关已完成检查点的其他信息。如果发生故障[ref],此信息用于防止完整重播上次完成的检查点。