Skip to content
Discussion options

You must be logged in to vote

@l-7-l 低流量、可信生产者场景下不一定会立刻产生巨大问题;高流量或多租户场景下,不建议直接放到 1 年。 主要风险是存储和 IO 放大,不是传统安全漏洞。超过 timerRollWindowSlot 的消息会被周期性 roll。也就是说,1 年后的定时消息不会一次性等 1 年,而是大约每 2 天重新写入一次内部 timer topic,直到接近投递时间。粗略看:

365 days / 2 days ≈ 183 次 roll
所以每条 1 年定时消息可能带来约 180 多次内部重写,包括 commitlog、consume queue、timer log 等元数据写入。消息量小没什么,消息量大时会明显增加磁盘写入、timer topic 积压、恢复成本和 roll 峰值。

安全角度上,它本身不是漏洞,但如果生产者不可信,确实可能变成资源消耗型风险:有人可以大量发送 1 年后的定时消息,占用磁盘、制造长周期 backlog,或者集中到同一个时间点造成 slot 拥塞和到期投递峰值。

建议七天到15天。不要延迟太多, 后续应该会优化这个实现,当前实现是和Java版本一致。 后续会进行优化!现在如果同一时间延迟的很多消息也会有一定的延迟。

Replies: 1 comment 2 replies

Comment options

You must be logged in to vote
2 replies
@l-7-l
Comment options

@l-7-l
Comment options

Answer selected by l-7-l
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants