etl时要做到数据不丢失,要满足如下条件
* 数据源消费可回溯
* 如kafka,自动控制offset时就可以消费任意数据,程序失败重启时,可以重复消费失败的数据
* 数据持久化后必须可查询
* 查询不确定数据,判断其是否处理完。
===== 例子 =====
- 从数据源读取消息A
- 处理消息A
- 将消息A的offset持久化到文件
- 读取消息B
- 程序崩溃
- 程序重启
- 读取持久化文件(读取上次完成的位置)
- 读取消息B
- 判断消息B是否处理完成
- 消息B处理完成,读取消息C...
- 消息B未处理完成,处理消息B...