谢邀
1. __consumer_offsets的确与普通topic在清理策略上不同,也就是参数cleanup.policy上compact和delete的区别。compact策略会对消息按照key进行压实操作(compact),你可以简单地理解为每个key上只保存最新的一个value。__consumer_offsets topic就是这样的清理策略。
在你使用的0.9版本中,这个策略两者必选其一,即要么delete要么compact。的确有可能出现这个topic数据量很大的情况。也正是这个原因,之后的版本中允许同时指定两种策略,即delete,compact,这样你既可以“享受”普通topic的删除策略也能实现compact的效果。因此你可以尝试升级kafka的版本,另外尝试减少offsets.retention.minutes值通常会加速这个topic过期消息删除的速度。个人不建议手动清理该topic,毕竟有可能造成group数据的丢失。不过,国外有个用户的确是把该topic的策略设置成了delete(参见[Kafka-users] Consumer Offsets Topic cleanup.policy 注意:请确保完全理解了这个帖子中所说的使用场景之后再这么做!另外比起这种“另类”的使用方法,升级到新版本Kafka并设置cleanup.policy=delete,compact似乎更加稳妥。)
2. log.cleaner.enable参数就是清除compact型topic的开关,默认就是true,不建议调整此参数。
3. 当前删除日志段是一个异步过程,log.segment.delete.delay.ms参数控制了等待多少秒后再开始删除操作。默认是1分钟,表示Kafka发起删除操作后,等1分钟才会开始删除底层的物理文件。至于cleaner.delete.retention.ms参数,Kafka会定期清理过期consumer group的元数据信息,一旦发现dead group,会往__consumer_offsets对应分区写入一个特殊消息,这种消息被称为tombstone消息或delete消息。Log cleaner在清理日志段时会根据cleaner.delete.retention.ms参数来计算一个时间点。位于该时间点之前的所有delete消息都会被清理掉。
这就是这两个参数的区别,希望我解释清楚了:)