消息存储相关的配置
消息的存储介绍
Kafka 的消息主题与 JMS、AMQP 的消息队列有所不同:JMS、AMQP 消息队列中的消息只能被消费一次,当消息被消费时,这条消息就会被移出队列;
但 Kafka 主题中的消息完全可以被多次重复消费,甚至可以从指定下标处开始读取消息。
从某种角度来看,Kafka 主题中的消息就像数据表中的记录,它会在一段时间内持久化保存,客户端(消费者)可根据需要反复地读取它们。这正是一开始就介绍过的:Kafka 并不是单纯的消息组件,而是'开源的分布式事件流平台'。
消息过期时间及处理方式
Kafka 主题中的消息默认保存期限为 7 天,这个默认保存时间可通过 server.properties 文件中的 log.retention.hours 属性进行修改。
当数据过期之后,Kafka 可以对数据进行两种处理:delete 或 compact。
- delete 表示直接删除过期数据。
- compact 则表示对数据进行压缩整理,更多是偏向整理。
演示:log.cleanup.policy 属性配置
对过期消息的处理设置:设置消息过期后就删除掉。 通过 server.properties 文件中的 log.cleanup.policy 属性进行配置。
修改指定主题的消息保存时间
在 server.properties 文件中配置的参数,它们都是对整个 Broker 生效的。有些时候,可能希望仅修改特定主题的某些配置,此时就需要对特定主题进行修改了。
修改指定主题的额外属性推荐使用 kafka-configs.bat(.sh)命令,该工具命令可指定如下常用选项:
- --alter:修改。
- --describe:显示。该选项与--alter 选项只能选择其中之一。
- --delete-config:指定要删除的配置属性,该选项的值应该符合'k1,k2'的形式。
- --add-config:指定要添加的配置属性,该选项的值应该符合'k1=v1,k2=[v1,v2],k3=v3'的形式。
- --bootstrap-server:指定要连接的服务器。
- --entity-type:指定要配置的实体类型,该选项可支持 topics(主题)、clients(客户端)、users(用户)、brokers(代理)和 broker-loggers(代理日志)这些值。
- --entity-name:指定要配置的实体的名称,该选项与--entity-type 结合使用,用于指定主题名,客户端 ID、用户名、Broker ID。
修改指定主题的保存时间,用 'retention.ms' 属性。
演示:将 test2 主题下的消息的保存时间设为 10 个小时
- --alter 表示要修改
- --entity-name test2 表示修改的是 test2
- --entity-type topics 表示修改的类型是 topics 主题类型
kafka-configs --bootstrap-server localhost:9092 \
--alter \
--entity-name test2 \
--entity-type topics \
--add-config retention.ms=36000000
1、先查看 test2 主题下的配置
没设置保存时间之前,查看下配置:发现什么都没有。 查询的命令在下面【查看指定主题的配置】那里有介绍:就是这个查询命令。
kafka-configs --bootstrap-server localhost:9092 \
--describe \
--entity-name test2 \
--entity-type topics
CMAK 界面也没有时间显示:配置里面默认消息存放是 7 天,这里没有显示。
2、然后设置消息的保存时间
然后设置 test2 主题下的消息保存时间为 10 小时。
3、然后再查一遍 test2 的配置,看是否修改成功
CMAK 界面查看也有了消息的存活时间。
查看指定主题的配置
查看指定主题的配置可用两条命令:


