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