在 Canal 中关于事务 Event 的环形缓存区实现类为 EventTransactionBuffer。
[](()1.1 类图
EventTransactionBuffer 的类图如下:
根据类图我们可以到其存储结构还是比较简单的。
-
int bufferSize环形缓存区的长度,默认为 1024,该长度必须为 2 的幂次方,因为对位运算非常友好。
-
int indexMask环形缓存区下标掩码,其值为 bufferSize - 1 ,sequence * indexMask 能快速定位序号 sequence 所在环形缓存区中的具体下标。
-
CannalEntry.Entry[] entries环形缓存区数据数组,即缓存区实际存储数据的内存区域,为数组结构,长度为 bufferSize。
-
AtomicLong putSequence当前写入的序号,每调用 add 方法添加一条数据,该值增加一,可超过缓存区的实际长度。
-
AtomicLong flushSequence当前已处理的数据序号,flushSequence <= putSequence,(putSequence - flushSequence)表示未处理的数据,即缓存区累积的有效数据。
-
TransactionFlushCallback flushCallbackflush 回调函数,这个和环形缓存区本身关系不大