当前位置: 首页 > news >正文

线上Kafka集群如何调整消息存储时间

这里是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目录执行如下命令

./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的这种配置设计来说,我们后续做技术设计的时候也可以采用这种优秀的方式,提供全局+局部的配置,局部配置优先级高于全局,其实如果开源软件使用的多的话,我们会发现大多开源软件的配置都采用这种设计思路

参考

  • Kafka官方文档:https://kafka.apache.org/35/documentation.html#configuration
http://www.lryc.cn/news/217309.html

相关文章:

  • [迁移学习]DA-DETR基于信息融合的自适应检测模型
  • 【MATLAB】全网唯一的13种信号分解+FFT傅里叶频谱变换联合算法全家桶
  • Nginx安装与配置
  • linux笔记总结-基本命令
  • [PHP]禅道项目管理软件ZenTaoPMS源码包 v16.4
  • Required String parameter ‘name‘ is not present
  • 路由器基础(五): OSPF原理与配置
  • Leetcode1128. 等价多米诺骨牌对的数量
  • Dev-C调试的基本方法2-2
  • 企业之间的竞争,ISO三体系认证至关重要!
  • node教程(四)Mongodb+mongoose
  • 作为一个初学者,该如何入门大模型?
  • 编译支持GPU的opencv,并供python的import cv2调用
  • Bug记录
  • web3 React dapp中编写balance组件从redux取出并展示用户资产
  • BIOS开发笔记 - DDR中的时序参数
  • 语义分割 - 简介
  • ch0_OSI 七层网络协议介绍
  • 超声波俱乐部分享:百度世界大会点燃AI创业者新希望
  • 【项目管理】项目计划中常见影响进度的风险汇总
  • Apache HttpClient库编写的Scala程序
  • Java 为什么不推荐在 while 循环中使用 sleep() 我悟了
  • 编程新手的犯错之路
  • 高级 Python:函数
  • 【学习笔记】[PA2019] Osady i warownie 2
  • Flask——接口路由技术
  • Dubbo篇---第一篇
  • powermock-成员变量赋值
  • Axios请求成功和失败时分别执行哪个函数?
  • 【Linux】进程概念III --fork函数解析