开发者社区 > 云原生 > 消息队列 > 正文

Apache RocketMQ commitlog这里面存的是queue的ID吗?我打开了这个

Apache RocketMQ commitlog这里面存的是queue的ID吗?我打开了这个commitlog里面的文件 都是二进制的 然后里面有message的id等消息,现在遇到的问题就是这个commitlog里面的文件没有一个被删除,感觉是清理机制没生效吗 都过了一周了,这个清理的逻辑是在哪里?

展开
收起
真的很搞笑 2023-05-30 14:29:46 101 0
2 条回答
写回答
取消 提交回答
  • Apache RocketMQ 的消息存储管理模块 commit log 中,存储的是未消费的消息,包括消息的主题(topic)、队列ID(queueId)、消息体(body)和一些其他元数据信息。

    commit log 是 RocketMQ 消息存储的核心组成部分,用于记录所有发布到 Broker 上的消息。每个 Broker 实例都有自己的 commit log,通过 commit log 可以追踪消息生产和消费的状态,并支持消息的查询、重放和删除等操作。

    在 commit log 中,每条消息有一个唯一的物理地址(physical offset),这个地址指向消息存储在文件系统中的实际位置。同时,每个主题下的消息都被划分为多个队列,不同队列的消息被存储在不同的文件中,而队列 ID 就是用于标识不同队列的编号。

    因此,可以说 commit log 中存储的是一条消息的完整信息,包括主题和队列 ID。在消费者消费消息时,也需要指定要消费的主题和队列,才能从 commit log 中读取出对应的消息。

    总之,在 RocketMQ 的 commit log 中存储的消息包含了主题和队列 ID 信息,并且队列 ID 是用于区分不同队列的重要标识符。

    2023-05-30 15:53:18
    赞同 展开评论 打赏
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    是的,Apache RocketMQ的commitlog中存储的是消息队列的ID。每个消息队列都有一个对应的commitlog文件,其中存储了该列中的所有消息。

    关于commitlog文件的清理机制,RocketMQ提供了两种清理策略:定时清理和按照磁空间占用比例清理。

    定时清理是指在指定的时间间隔内,定期清理过期的commitlog文件。可以通过修改broker.conf配置文件中的deleteWhenfileReservedTime参数来设置清理策略。其中,deleteWhen参数指定了清理策略,可以设置为intervalat,分别表示定时清理和按照磁盘空间占用比例清理;fileReservedTime`参数指定了commitlog文件的保留时间,超过该时间的文件将被清理。

    按照磁盘空间占用比例清理是指在磁盘空间占用比例超过一定阈值时,清理过期的commitlog文件。可以通过修改broker.conf配置文件中的diskMaxUsedSpaceRatio参数来设置清理策略。该参数指定了磁盘空间占用比例的阈值,超过该阈值时,将触发清理制。

    如果您的commitlog文件没有被清理,可能是由于清理策略没有生效或者配置不正确。您可以检查broker.conf配置文件中的清理策略参数是否正确,并查看broker的日志文件,查看是否有清理相关的日志输出。如果问题仍然存在,建议您查看RocketMQ的官方文档或者在社区中寻求帮助。

    2023-05-30 14:39:08
    赞同 展开评论 打赏

高弹性低成本、更稳定更安全、智能化免运维的消息队列服务,涵盖RocketMQ、Kafka、RabbitMQ、MQTT、MNS等。 RocketMQ一站式学习:https://rocketmq-learning.com

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载

    相关镜像