企业网站定制开发云原生中间件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);
  • 1
  • 2

集群模式下,每个消费者消费的肯定不是同一个消息。

集群模式下每一个queue都只能被一个消费者消费,但是每一个消费者都可以消费多个queue。

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

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

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位大佬指出。
主页

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发