3 min read
消息队列 Overview
Message Queue 消息队列
场景
系统崩溃
存储行为服务的decouple

高并发
下单时的削峰

连路调用耗时长

Kafka
分布式的、分区的、多副本的日志提交服务,高吞吐下性能好:
- Producer batch zip
- Broker 顺序写,消息索引,零拷贝
- Consumer rebalance
基本使用

概念
Cluster
-
Topic: 逻辑队列,不同业务场景就是一个不同的topic
-
Partition: topic的分片,可以并发处理
Offset
partition 内的相对位置信息,消息的唯一id
Replica
Partition的副本,用来融灾
-
Leader 对外服务
-
Follower 异步拉取leader数据同步
-
ISR:从ISR中选取Leader Replica,当follower和leader差距较小时将follower加入ISR
架构
Cluster/Broker
图中 Broker 代表每一个kafka的节点,所有broker组成了一个cluster。
一共两个Topic,Topic1有两个partition,Topic2有1个,每个partition都是3replica。
Controller:有一个Broker同时是Controller,控制这个Cluster。

ZooKeeper
Cluster之上有一个ZooKeeper模块,存储Cluster的元数据,Controller计算好的数据都放到这里。

过程

Producer
-
Batch:一次传输多个,减少IO
-
压缩:减少信息大小
Broker
顺序写消息文件存储

为顺序写方式,可以减少寻道时间:磁盘中,移动磁头找到磁道-》扇区-〉写入。
偏移量索引

数据拷贝
传统

零拷贝

consumer从broker中读取数据,从磁盘读到os后直接通过socket buffer网络发送。
Consumer
手动分配 Low level
Pros: 启动快
Cons: 如果新增consumer或者停用partition,需要停掉整个cluster进行修改。

自动分配 High level
选一个Broker作为Coordinator来帮助rebalance。

RocketMQ
对比Kafka:

同样是Producer, Consumer, Broker,只是partition-》message queue。

架构
特点:有一个nameserver提供轻量级服务发现和路由。

特性
事务场景


延迟发送

失败处理:消费重试和死信队列
