0


云原生中间件RocketMQ-消费者核心参数、消费模式之集群模式

文章目录

PushConsumer核心参数详解

在这里插入图片描述

  1. consumeFromWhere:消费者从那个位置开始消费在这里插入图片描述
  • CONSUME_FROM_LAST_OFFSET:第一次启动从队列最后位置消费,后续再启动接着上次消费的进度开始消费
  • CONSUME_FROM_FIRST_OFFSET:第一次启动从队列初始位置消费,后续再启动接着上次消费的进度开始消费
  • CONSUME_FROM_TIMESTAMP:第一次启动从指定时间点位置消费,后续再启动接着上次消费的进度开始消费
  1. allocateMessageQueueStrategy:消息分配策略(集群模式),指定如何将消息队列分配给每个客户端。包括一致性hash、平均分配、平均轮询分配、自定义消费队列、按机房hash算法实现。默认平均轮询AllocateMessageQueueAveragely,Rebalance(轮询)算法实现策略。

平均分配的实现算法

  • 如果消费者的个数可以除尽队列的个数,那么就完全平均分。
  • 如果不能除尽。那么靠前的消费者多消费一个队列,靠后的消费平均数个队列。
  • 如果消费者的个数大于队列的个数,那么靠前的消费者消费一个队列,后面的不消费。在这里插入图片描述
  1. subscription:订阅关系。

在这里插入图片描述

  1. offsetStore: 消息进度存储。
  • 集群消费:从远程Broker获取。
  • 广播消费:从本地文件获取。在这里插入图片描述
  1. consumeThreadMin/consumeThreadMax:最小消费线程数,最大消费线程数,默认都是20。在这里插入图片描述
  2. consumeTimeout:消息阻塞使用线程的最长时间(以分钟为单位),默认15。
  3. pullThresholdSizeForQueue:在队列级别限制缓存的消息大小,默认情况下每个消息队列最多缓存100MiB消息。
  4. consumeConcurrentlyMaxSpan / pullThresholdForQueue: 单队列并行消费允许的最大跨度,默认值2000, 队列级别的流量控制阈值,拉消息本地队列缓存消息最大数,默认1000。
  5. pullInterval: 消息拉取时间间隔,由于是长轮询,所以为0,但是如果应用为了流控,也可以设置大于0的值,单位毫秒,默认0。
  6. pullBatchSize: 批量拉消息,一次最多拉多少条,默认32。
  7. consumeMessageBatchMaxSize: 批量消费,一次消费多少条消息,默认1。
  8. maxReconsumeTimes:最大重试次数,并行模式下默认-1也就是16次,顺序模式下默认-1表示Integer.MAX_VALUE。在这里插入图片描述
  9. awaitTerminationMillisWhenShutdown:当关闭消费者时等待消息消耗的最大时间,0表示没有等待。默认0。
  10. messageModel:消息模型定义了将消息传递到每个客户端的方式,默认集群模式。在这里插入图片描述

PushConsumer消费模式-集群模式

GroupName用于把多个Consumer组织到一起,相同GroupName的Consumer只消费所订阅消息的一部分。
目的:达到天然的负载均衡机制。发消息队列数要和consumer数量为倍数,才能平均负载均衡。
消费者采用负载均衡(集群模式)方式消费消息,一个分组(Group)下的多个消费者共同消费队列消息,每个消费者处理的消息不同。一个Consumer Group中的各个Consumer实例分摊去消费消息,即一条消息只会投递到一个Consumer Group下面的一个实例。例如某个Topic有3个队列,其中一个Consumer Group 有 3 个实例,那么每个实例只消费其中的1个队列。集群消费模式是消费者默认的消费方式。
集群模式: 使用相同 Group ID 的订阅者属于同一个集群。 同一个集群下的订阅者消费逻辑必须完全一致(包括 Tag 的使用) , 这些订阅者在逻辑上可以认为是一个消费节点。
在这里插入图片描述
消费端通过如下代码指定消费模式:

// 消费模式 默认是集群模式(负载均衡模式),还有是广播模式
consumer.setMessageModel(MessageModel.CLUSTERING);

集群模式下,每个消费者消费的肯定不是同一个消息。
在这里插入图片描述
集群模式下每一个queue都只能被一个消费者消费,但是每一个消费者都可以消费多个queue。

集群模式适用场景&注意事项:

  • 消费端集群化部署, 每条消息只需要被处理一次;
  • 由于消费进度在服务端维护, 可靠性更高。
  • Topic + Tag下的消息可以保证肯定会被整个集群至少消费一次 ;
  • 不保证每一次失败重投的消息路由到同一台机器上, 因此处理消息时不应该做任何确定性假设。
  • 集群中的每个消费者消费的消息肯定不会是同一条消息,因为实际上在集群模式下 - 每一个queue都只能被一个消费者消费- 但是每一个消费者都可以消费多个queue

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位大佬指出。
主页:共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_35427589/article/details/126332113
版权归原作者 共饮一杯无 所有, 如有侵权,请联系我们删除。

“云原生中间件RocketMQ-消费者核心参数、消费模式之集群模式”的评论:

还没有评论