ActiveMQ KahaDB中db-xxx.log的最大序号及达上限后的运行行为
KahaDB 日志文件序号上限及溢出行为说明
序号最大值
KahaDB的journal日志文件序号采用32位有符号整型存储,理论最大值为 2^31 - 1 = 2147483647,远高于你举例的9999999数值。
序号生成与清理规则
- 日志序号从1开始全局递增,计数器持久化在KahaDB元数据中,Broker重启也不会重置,也不会复用已被清理删除的旧文件序号。
- 当当前写入的日志文件达到配置的
journalMaxFileLength阈值(你的配置为32mb),就会自动创建序号+1的新日志文件写入新数据。 - 你配置的
cleanupInterval="5000"代表每5秒执行一次日志清理任务:当日志文件内所有持久化消息都被确认消费、关联事务完成、不存在未处理的引用时,对应文件会被自动删除。你当前只看到db-5.log、db-6.log属于正常情况,说明序号1-4的日志已经被清理逻辑判定为无有效数据后移除。
序号触达上限的行为
当序号递增到2147483647后,下一次创建新文件时整型计数器会溢出为负数,会生成文件名格式异常的日志文件,此时KahaDB会直接抛出IO异常,Broker将无法写入新的持久化消息。
注:这个上限在实际生产环境几乎不可能触达:按你配置的单文件32MB计算,写满21亿个日志文件需要的总存储量约为64PB;就算保持每秒写满1个32MB文件的极端写入压力,也需要连续运行近68年才会触发该问题,日常运维完全不需要针对这个上限做特殊处理。
内容的提问来源于stack exchange,提问作者user19296341
相关产品推荐
相关产品推荐

