这里是weihubeats ,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党
Kafka版本
- kafka_2.13-3.5.0
背景
Kafka
默认消息存储时间为7天,实际线上的业务使用Kafka
更多的是一些数据统计之类的业务,大多是朝生夕死,大概存储1-3天就可以了。为了节省磁盘,避免存储过多的消息浪费磁盘,所以我们需要调整Kafka
的消息存储时间
Kafka 配置
这里先给大家科普下Kafka
配置分哪几种吧
- read-only: 只读参数,或者说是静态参数,修改后只有重启broker才会生效
- per-broker:动态参数,修改后不用重启broker即可生效
- cluster-wide: cluster-wide的参数也属于动态参数,修改后会在整个集群范围内生效,对所有Broker都生效。也可以为具体的Broker修改cluster-wide参数
消息存储配置
消息存储配置分两个。一个是broker
维度,一个是topic
维度
如果是topic
配置了存储时间,就使用topic
的,如果是broker
配置了,就使用broker
的
broker消息存储配置
我们先看看broker
的消息存储时间配置
可以看到这个参数是read-only
,意味着改动非常不方便,需要重启。 然后就是过期时间有三个时间维度,小时、分钟、秒 默认是小时,168小时即7天
优先级是 ms > minutes > hours
除了通过设置消息过期时间外,我们还可以设置broker
总的消息保存磁盘大小,不过这个一般不设置
topic消息存储配置
可以看到broker
的消息存储时间修改需要重启broker
是非常不方便的,那么topic
的消息存储时间是不是也是需要重启的呢。
所有的topic
属性都是可以在不重启broker
的情况下进行更改
可以看到配置是retention.ms
,默认也是7天
如果要修改topic
的配置可以进入到bin
目录执行如下命令
sh
./kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name my-topic --add-config retention.ms=86400000
这里是将
Topic
的消息存储时间调整为86400000(1天)
总结
总的来说Kafka
的配置分broker
级别和Topic
级别。如果我们要修改消息的存储时间,最好是通过修改Topic
的存储时间来修改,因为不用重启broker
。
不过在部署Kafka
集群的时候我们也建议设置合理的消息存储时间,避免每个Topic
都要定制化配置,才能最大化利用磁盘,避免磁盘浪费
其次从Kafka
的这种配置设计来说,我们后续做技术设计的时候也可以采用这种优秀的方式,提供全局+局部的配置,局部配置优先级高于全局,其实如果开源软件使用的多的话,我们会发现大多开源软件的配置都采用这种设计思路