当前位置: 首页 > news >正文

rocketmq和kafka的区别之顺序消费

文章目录

    • 一.背景
    • 相同点
    • 二.差异
      • 1. rocketmq的实现方式
        • 1.1 消费线程对ProcessQueue加锁要解决什么问题?
      • 2. kafka的实现方式
    • 三. 为什么会有这样的差异?

一.背景

rocketmq和kafka都可以保证消息消费的有序性, 但是由于设计理念的区别导致大家的实现方式完全不同。

相同点

两者都是通过key取模 使拥有相同key的消息进入同一个分区中。

二.差异

两者在消费端的处理模式是不同的。

1. rocketmq的实现方式

 rocketmq采用一个消费者实例 + 内部线程池的模型。为保证消费的有序性需要加3把锁1. 消费者实例对Broker实例的MessageQueue加锁, 保证该队列的消息只会投递给同一个消费者实例2. 消费者实例单次拉取多条消息到l本地ProcessQueue,并且提交到线程池。 为了保证同一时间一个queue只会被同一个线程消费,要对本地的MessageQueue加锁。持锁的线程才有资格消费。3. 消费线程对ProcessQueue加锁,因为要确保在发生重平衡时 Rebalance线程无法获取到ProcessQueue的锁, 无法对ProcessQueue修改,造成重复消费。
1.1 消费线程对ProcessQueue加锁要解决什么问题?
时刻线程操作说明
T1消费线程AProcessQueue.msgTreeMap中取出10条消息消息处于"在途"状态,已从队列取出但未完成处理
T2Broker触发重平衡(如新消费者加入)通知当前消费者不再负责MessageQueue-X
T3重平衡线程ProcessQueue-X.dropped = true,准备移除队列并持久化消费进度此时认为该队列已不再属于当前消费者
T4消费线程A处理完10条消息,尝试更新消费进度并删除msgTreeMap中的消息操作一个可能已被标记为丢弃的队列

重平衡线程在T3时刻持久化的消费进度不包含T1时刻取出的10条"在途"消息

在这里插入图片描述

2. kafka的实现方式

1. kafka采用一个线程对应着一个消费者的模型
2. 一个应用实例可以有多个消费者(KafkaConsumer), 每个Kafka都是单线程执行的。即一个应用实例有多个消费者实例, 这些消费者实例是单线程运行的,所以不需要有rocketmq的3把锁。

三. 为什么会有这样的差异?

1. 因为rocketmq采用rocketmq采用一个消费者实例 + 内部线程池的模型, 加上考虑到重平衡的影响,需要加3次锁。
2. kafka采用一个线程对应着一个消费者的模型, 本身就是单线程执行的,不存在并发的问题。
http://www.dtcms.com/a/498957.html

相关文章:

  • 套路有*道龙激光-乐多刀销*游戏程序系统方案
  • Angular 2 数据显示
  • 如何快速做单页面网站怎么查网站建设是哪家公司
  • 外国网站备案网站板块设置
  • 从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
  • 云手机 三角洲行动跑刀
  • Java 反射机制深度解析:从对象创建到私有成员操作
  • c++|表达最值的更好方法|clamp
  • Altium Designer(AD24)File文件功能总结
  • 【EE初阶 - 网络原理】应用层协议(下)
  • Pyinstaller - Python桌面应用打包的首选工具
  • PHP编程语言选择
  • 太原市做网站专业团队广告语
  • 桂林设计单位资质升级网站手机怎么建网站
  • k8s问题详解1:k8s集群上传文件过大导致413 Request Entity Too Large(请求文件实体过大)
  • 计算机毕业设计:Python农业数据可视化分析系统 气象数据 农业生产 粮食数据 播种数据 爬虫 Django框架 天气数据 降水量(源码+文档)✅
  • 怎么做一个链接网站东莞直播app软件开发定制
  • VSCode - 设置MSYS2终端
  • MATLAB学习文档(二十五)
  • 告别“静态”VI手册:InDesign与AE打造可交互的动态品牌规范
  • 推广网站有那些个人网站免费域名注册
  • Windows EXCEPTION_RECORD 结构深度解析
  • LangGraph学习笔记(四):langgraph本地的流式输出
  • Phoenix Code:一款专为Web开发打造的开源文本编辑器
  • 网络营销的基本特征有哪七个wordpress宝塔优化
  • pyvideotrans问题
  • Large-scale CelebFaces Attributes (CelebA) 数据集生态:核心详解、免费下载与三大扩展应用全景​
  • 【BuildFlow 筑流】品牌命名与项目定位说明
  • PHP 8.0+ 现代Web开发实战指南 引
  • 沈阳有什么网站浙江网架公司