1、流式回放功能
录制、解析、回放三个进程同时启动,实现边录制边解析边回放。
注1:该流式处理功能不影响原有的录制、解析、回放三个进程顺序执行的结果,原有操作方式仍可使用
注2:为了防止录制端进程异常终止导致解析端和回放端进程残留的问题,工具提供了参数parse.max.time和replay.max.time配置解析端和回放端的最大工作时长,达到该阈值则进程自动终止,默认值为0,进程等待直到收到endFile文件。
注3:在配置了parse.max.time非0时,且时间达到该阈值后一直未检测到endFile标识,假如共收到n个pcap包,则进程退出时仅解析前n-1个文件,最后一个文件不解析,回放端参数replay.max.time同理
注4:考虑到json模式下发送到解析端的tcpdump文件量过大会导致磁盘占用率高,影响回放性能,提供了参数tcpdump.file.drop控制在解析过程中是否每解析完一个tcpdump文件就立刻删除,默认false。
2、回放结果对比
将回放端的select语句查询结果与源端查询结果进行对比,并将对比结果写到data_diff.log日志文件里,该功能可通过参数控制是否开启。操作步骤如下:
step1.解析端配置参数:
//是否解析select语句查询结果,该功能用于对比录制端和回放端的查询结果
parse.select.result=true
//select语句查询结果保存文件路径
select.result.path=/***/***/***
//select语句查询结果保存文件名称
result.file.name=select-result
//select语句查询结果保存文件大小
result.file.size=10
step2.回放端配置参数:
//是否将回放端和录制端的select查询结果对比
compare.select.result=true
//select语句查询结果保存文件路径
Select.result.path=/***/***/***
//select语句查询结果保存文件名称
Result.file.name=select-result
step3.开启进程进行解析回放
注1:开启对比功能则会将源端所有select语句查询结果保存到磁盘,因此开启该功能应预留足够的磁盘空间
注2:由于该功能是将源端select语句的响应包直接解析,回放端是通过调jdbc将查询结果进行了转化,二进制类型blob、longblob、mediumblob、tinyblob、raw通过jdbc的转化,与直接解析响应包得到的数据格式不相同,因此这几种类型的数据对比结果与源端不一致,这是对比功能的局限性,实际数据库里存的值是一致的,对业务无影响
3、时间间隔一致
回放端相邻sql的回放时间间隔与源端保持一致,该功能可通过参数控制是否开启
前置条件:开启参数source.time.interval.replay=true,然后进行回放。
注1:源端和回放端执行sql耗时存在一定差异,为了避免相邻sql之间的数据依赖关系影响回放结果,在回放间隔基本一致的条件下,还需确保所有sql按顺序串行执行,因此两个相邻sql回放时间间隔跟源端可能存在差异,但差异是毫秒级别的,可以忽略,但在业务量较少的场景下,时间间隔可以达到一致



