Bifrost Document

Version 1.6.x

Bifrost ---- 面向生产环境的 MySQL 同步到 Redis,MongoDB,ClickHouse 等服务的异构中间件

数据消费

在同步配置中标记为文件队列已启动,并且当前内存队列大小为 0 的时候,会自动从文件队列中加载数据

加载过程

  1. 每次从文件队列中读取一条数据,最多加载条数为 内存队列最大大小 - 1 ,加载出来后写入刷回到内存队列

  2. 每次内存成功被同步一条数据后,往文件队列中 ack 一次数据

  3. 将所有文件队列数据处理完之后,标记文件队列功能关闭,后续的数据,后续数据直接进入内存队列

ACK 过程

其实每次 ACK 并不是立马将这条数据从文件队列中删除,而是用于统计每个文件成功被处理了多少条数据

  1. 每次从文件中读取一条数据的时候,都会统计每个文件被读取了多少条数据

  2. 在整个文件都被加载完之后,标记当前文件已经没有数据可加载了

  3. 每次 ACK 按文件加载的的顺序,进行标记 - 1,直到减为 0 ,并且文件标记是已加载完数据,则将整个文件删除

小结

因为文件写入和读取,都是有序的,可以保证被删除文件的时候,所以数据都已经被成功处理

由于 ACK 的时候并不是将这条数据删除掉,所以如果当前这个文件数据只被成功处理了一半,Bifrost 被重启了,下一次启动的时候,会从当前这个文件第一条数据开始处理

Last updated on 11 Aug 2020
Published on 11 Aug 2020
Edit on GitHub