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

消息中间件mq*(Kafka)

RabbitMQ和Kafka的区别

Kafka 适合 数据量大 高吞吐量和数据持久化

RabbitMQ  低延迟 灵活路由 多协议支持

就是一个量大 一个速度快

Kafka如果保证数据不丢失

1 通过日志实现异步回调机制  重试机制保证数据不丢失

2 复制机制 设置acks确认

3 禁用自动提价偏移量改为手动提交

Kafka消息的重复消费问题

Kafka消费消息是按照offset进行标记消费的  消费者默认是自动按期提交已经消费的偏移量

但是可以通过禁用自动提价偏移量 改为手动提交 避免消息丢失和重复消费

为了保证消息的幂等性 可以通过数据库加锁 设置唯一主键 redis分布锁

Kafka如何保证消费的顺序性

默认是不能保证顺序性的 因为可能存储在不同的分区 但是可以解决 有两种方法 都是把消息都存储到同一个分区下  但是感觉这么做会影响性能

1 指定分区号

2 相同业务设置相同key  hash值一样的话 分区肯定也一样

Kafka高可用机制

集群

多个broker实例组成集群 即使某一台宕机了  也不耽误其他的broker继续对外提供服务

复制机制

一个topic有多个分区 每个分区有多个副本 其余的是follower 副本存储在不容的broker中 所有的分区副本的内容是相同的  如果leader发生故障时 会自动将其中一个follower提升为leader 从而保证高可用性 提高容错

复制机制的ISR

in-sync replice  同步复制保存follower

还有一种就是异步的

Kafka的数据清理机制

topic的数据存储在分区上 分区如果文件过大的会分段存储segment

每个分段都以 索引和日志文件的形式存储

这样分段的好处 1 减少单个文件内容的大小 查找数据方便 2 方便kafka进行日志清理

清理策略

1 根据消息保留时间 超时触发清理

2 根据topic存储大小

这两个都可以通过kakfa的broker中的配置文件进行设置

Kafka实现高性能设计

Kafka高性能来自 多方面协同的结果  宏观架构 分布式存储 ISR数据同步 高效利用磁盘 操作系统特性

消息分区 不受单服务器的限制 可以不受限的处理更多数据

顺序读写 磁盘读写效率高

页缓存 磁盘中的数据缓存到内存中 把对磁盘的访问变为对内存的访问

零拷贝 减少上下文切换以及数据拷贝

消息压缩 减少磁盘io和网络io

分批发送 将消息打包批量发送 减少网络开销


http://www.kler.cn/a/369848.html

相关文章:

  • rocketmq-product-send方法源码分析
  • 【高项】6.3 排列活动顺序 ITTO
  • 概率密度函数(PDF)分布函数(CDF)——直方图累积直方图——直方图规定化的数学基础
  • 2_高并发内存池_各层级的框架设计及ThreadCache(线程缓存)申请内存设计
  • rust 自定义错误(十二)
  • TangoFlux 本地部署实用教程:开启无限音频创意脑洞
  • 【C++】How the C++ Compiler Works
  • java_方法重载、可变参数、作用域
  • Excel-多表数据查找匹配(VLOOKUP)
  • Chromium HTML5 新的 Input 类型tel对应c++
  • 编写xml形式sql语句注意事项
  • 「C/C++」C++设计模式 之 Pimpl模式
  • `a = a + b` 与 `a += b` 的区别
  • 软考:缓存分片和一致性哈希
  • 如何搭建AI智能化招聘平台?招聘系统源码与小程序开发技术方案探讨
  • 在html中引用unpkg的vue3,v-model无法绑定方法
  • JAVA模仿银行系统要求
  • 【C语言】int类型整数取值范围的缘由
  • 【LLM论文日更 | 一种引入上下文的文档嵌入方法 】
  • Jenkins+maven+git(gogs)自动化构建打包+部署(项目实战)
  • 深度学习:YOLO v2 网络架构解析
  • 2025年NPDP产品经理认证考试时间和报考条件
  • 2974. 最小数字游戏
  • 卡码网KamaCoder 97. 小明逛公园
  • html之文字,图片,链接,音视频
  • C语言 | Leetcode C语言题解之第517题超级洗衣机