Topic-Compaction 的设计比较特殊, 他不是简单的删除历史消息的操作, 相反,他却是一个移动 topic Ledger的操作, 通过将每个key的最新的消息移动到新的leader实现.

整个执行分两步执行:

  • pre: 获取到最老的消息最为迭代key的起点, 最新的消息作为迭代key的终点
  • first round: 遍历两个key范围内的消息, 获取每个key最新的 messageId
  • second round: 遍历两个key范围内的消息, 过滤出是 key最新的 message, 添加到新的leader.

显然, 从设计上来讲, compact ledger 的缺点还是很明显的

  1. topic-compaction 期间不能够有新的消息
  2. key的重复率需要比较高, 否则没有效果

目前比较合适的场景也就是 股票场景,只关心每个key最新的消息