消息队列| 青训营

76 阅读2分钟
  1. 四个场景 如何解决
    • 系统崩溃 存储服务崩溃
      • 解耦 先把记录放进消息队列
    • 服务处理能力有限
      • 削峰 订单都放入消息队列 处理从里面拉取
    • 链路耗时长
      • 放入消息队列 异步
    • 日志如何处理
      • 日志放入消息队列
    • 消息队列 保存消息的容器 需要支持高吞吐 高并发 高可用
  2. Kafaka
    • 使用场景
      • 日志信息
      • Metrics数据
      • 用户的行为(搜索 点赞 评论 收藏)
    • 如何使用
      • 创建集群(Cluster)
      • 新增Topic (逻辑队列) 会有多个分区(Partition)
      • 编写生产者逻辑(Producer)
      • 编写消费者逻辑(Consumer (Group) )
    • Offset 在partition的相对位置 可以理解为唯一ID 内部严格递增
    • Replica 副本 主从的角色 Leader Follower 会有多个 差距过大的会被踢出 ISR概念
    • Controller 架构图 还有一些该概念 可以再去了解了解
    • Producer 提高吞吐和稳定性的功能 以下三方面
      • Batch 分批发送 解决QPS
      • 数据压缩 解决数据量太大 ZSTD压缩算法
    • Broker
      • Broker消息文件结构 顺序写 提高写入效率
      • 二分查找 稀疏索引
      • 传统数据拷贝 有多次 内核态到用户态 (写入同理)
      • 采取零拷贝 直接从磁盘读数据到Buffer 再到网卡
    • Consumer
      • 数据分配:手动分配 自动分配
      • Rebalance 策略(比较复杂)
    • 缺点:
      • Kafka重启 Leader切换 追赶数据 数据同步 Leader回切
      • 替换 扩容 缩容
      • 只要有节点变动 都会有数据复制 带来的成本
      • 负载不均衡 需要迁移 需要复制 (复制本身就带来负载)
      • 运维成本高 负载均衡方案复杂 没有自己的缓冲
      • 三层在一个进程 有可能一起挂
  3. BMQ (自研) 兼容Kafka 存算分离 支持云原生
    • 多了个Proxy
    • 重启 替换 扩容 缩容 秒级完成 Kafaka 小时甚至天
    • 数据分配均匀
    • 状态机
    • Broker写文件流程
      • 数据校验
      • 放到buffer
      • 异步线程写入
      • 返回策略
    • Datanode 节点挂 换个节点
    • 请求数据->Wait->Cache->Storage
    • 如果缓存有直接返回 没有去Storage
    • 多机房部署
    • 高级特性
    • 泳道消息
    • Databus
    • Parquet 列式存储
  4. RocketMQ----用于实时的业务 跳过了 简单介绍一下

RocketMQ 是一个开源的分布式消息中间件系统,由阿里巴巴集团开发和维护。它被设计用于解决大规模分布式系统中的消息传递和通信问题。RocketMQ 具有高吞吐量、低延迟、高可靠性和强大的扩展性,被广泛应用于各种场景,如电子商务、物联网、金融、大数据等。