对比读取老数据、新数据、以及把老数据立刻复读一遍这三种场景真实的延迟差异,看page cache命中与否对读取速度的真实影响,以及这个差距在本机为什么没有被放大。
命令 · python def measure(start_offset, n=5000): c.assign([TopicPartition(TOPIC, PART, start_offset)]) t0 = time.time() # 真实读n条,记录耗时
冷数据(offset=0): 0.011s / 5000条 = 0.0022ms/条 热数据(offset≈85000): 0.008s / 5000条 = 0.0017ms/条 冷数据复读(offset=0第二次): 0.006s / 5000条 = 0.0011ms/条
第一次读offset=0的老数据(约一个多小时前写入,中间又写入了几十万条新数据,理论上老数据大概率已经被挤出page cache),真实耗时0.0022毫秒/条;读接近log末尾的新数据,真实耗时0.0017毫秒/条,比老数据快about23%;而把同一份"老数据"在第一次读取之后立刻真实再读一遍,耗时降到0.0011毫秒/条——比它自己第一次读快了一倍。
每一步都是本文上面真实用consumer测出来的原始结果。