我正在使用 flink 检查点来恢复我的工作状态。我使用未对齐的检查点,检查点间隔为 100 毫秒。我看到很少有事件被操作员成功处理或正在飞行中但尚未被检查点捕获。也就是说,这些是进入先前捕获的检查点状态和失败之间的管道的新事件。
我的项目在事件读取和 mongo 摄取后确认(提交)回到主题。但此后管道有改造、浓缩和汇算子。这些丢失的事件被读取、确认回主题并在失败之前成功转换,并且尚未设置检查点(检查点之间有 100 毫秒的间隔)被丢弃。
管道: 源(安慰主题,队列读取器)--> [MongoWrite + sourcecommit]--> 转换--> 丰富--> 接收器(安慰主题)
检查点: 未对齐, 恰好一次, 100毫秒间隔, 检查点之间最小暂停 10 毫秒
我看到每当抛出运行时异常时,它都会一一触发每个函数中的 close 方法。我们是否必须存储失败前检查点尚未捕获的状态?网络故障或任务管理器崩溃或任何其他突然故障会发生什么?
或者我们是否必须将源主题确认转移到最后(但我们必须将所有这些运算符链接起来在单个线程中运行,并从安慰队列中携带字节数组消息对象以在最后进行确认)。
还有什么我还遗漏的吗?
为了从 Flink 获得一次性保证,您必须依赖 Flink 将 Kafka 偏移量记录作为状态的一部分。从你说的来看:
我的项目在事件读取和 mongo 摄取后确认(提交)回到主题
听起来您正在尝试自己管理偏移量,但这是行不通的。