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

为啥要取两者之间的较小值?

fa175bab952bea49d63fab1967fb1ec2.png我看代码的时候发现有这么一个提交 说是当客户端指定分区大于服务端topic时取较小的那个,我不是很清楚为什么要这么做,我感觉取服务端的topic大小不才是最准确的吗。所以想看下#212那个issue到底发现了什么问题 才要这么做 为啥要取两者之间的较小值?

展开
收起
圆葱猪肉包 2023-03-27 10:28:57 234 0
3 条回答
写回答
取消 提交回答
  • 这个case不好追溯了。不过自动创建Topic 这个链路是非常明确的,不适合生产环境。生产环境,资源的CRUD管理还是要严格遵守。否则就会产生这种细节上的纠结。内部的约定很难被业务方理解的。此答案整理自钉群“群1-Apache RocketMQ 中国开发 者钉钉群”

    2023-03-28 10:46:46
    赞同 展开评论 打赏
  • 取最小值本质上是为了容错准备的,每次能够保证消息一定是通过最小的分区路由过去的。

    2023-03-27 11:50:23
    赞同 展开评论 打赏
  • 月移花影,暗香浮动

    这种情况是为了防止客户端在指定分区时输入错误的分区号。如果服务端的topic只有3个分区,而客户端却指定了4个分区,这将导致客户端的消息无法正确发送到服务端。所以服务端为了避免这种情况,会自动取客户端指定的分区号与服务端topic中分区号的较小值作为实际的分区号来发送消息。这样可以保证消息被正确地路由到正确的分区。

    2023-03-27 10:44:11
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载