消费模式及rebalance机制

2024-03-30 16:04
文章标签 模式 机制 rebalance 消费

本文主要是介绍消费模式及rebalance机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

消费模式:广播模式和集群模式

   广播模式:相同的consumer group的每个consumer实例都会接收同一个topic的全量消息。即每条消息都会被发送到 consumer group中的每一个consumer。消费进度保存着在consumer端,该模式下consumer group中的每一个consumer都会消费所有消息,且每个consumer之间的进度不需要保持一致。

  集群模式:相同consumer group的每个consumer实例平均分摊同一个topic的消息。即每条消息只能发送到某个consumer中。消费进度保存在broker中,consumer group 中的所有consumer共同消费同一个topic中的所有消息,一条消息只被消费一次,且进度共享。

rebalance机制(rebalance机制的前提是集群模式):

 在均衡,将一个topic下的多个queue在同一个consumer group中的多个consumer间进行重新分配。用于提升消息的并行消费进度。例如,增加一个consumer提高消息并行能力。

 限制:一个队列最多分配给一个consumer,因此当consumer的数量多于queue的数量时,多余的consumer是分配不到任何队列的。

rebalance危害:

  消费暂停:在新增一个consumer后,触发rebalance发生。此时原consumer就需要暂停对队列的消费,等着这些队列分配给新的consumer后,这些暂停队列才能被继续消费。

  消费重复:rebalance后consumer在消费分配给自己的队列时,必须接着之间的原来rebalance前消费该队列的consumer提交到broker的消费进度offset进行消费。但默认情况是offset提交到broker是异步提交,导致提交到broker的进度可能与实际进度不同,导致消息重复消费。

  消息突刺:rebalance可能导致重复消费,如果重复消费的消息过多,或者因为rebalance暂停时间过长从而导致积压信息过多时,可能导致rebalance结束的一瞬间需要消费很多消息。

offset管理(消费进度offset)

  1、offset本地管理模式     :当消费模式为广播模式,offset采用本地模式存储,每个消费者管理自己的消费进度,各个消费者之间不存在消费进度的交集。offset相关数据以json的形式持久化到consumer本地磁盘中。

  2、offset远程管理模式     :消费者模式为集群模式,offset使用远程管理,所有consumer共享queue消费进度。offset以json形式持久化到broker磁盘文件中。                                                       broker启动时会加载这个文件,并写入一个双层map。外层map的key为topic与订阅了该topic的queue,value为内层map。内存map的key为queueId,value为offset。当发生rebalance时,新的consumer会从map中获取到相应的数据继续消费。

这篇关于消费模式及rebalance机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861935

相关文章

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir