MQ Redis Zero MQ Active MQ Rocket MQ
























- Slides: 24
MQ 系统 • • • 一、Redis 二、Zero. MQ 三、Active. MQ 四、Rocket. MQ 五、Kafka
Kafka 架构 • 基础架构 Zookeeper kafka cluster Consumer-A Producer-A Broker 1 系统结构 Producer-B Broker 2 Broker 3 Producer-C Consumer-A Consumer-C
Kafka 架构 • 基本概念 – 主题:topic – 分区:partition Producer – 消息:message – 生产者:producer – 消费者:consumer group – 消息队列:broker Topic 1 1. . N Partition Consumer Group 1 1. . N Consumer
Kafka 架构 • kafka 消息流程图 producer topic consumer group Producer-A 消息队列 partition Producer-B 本地磁盘 注 1:消息� 列依� 于本地磁� 注 2:默认情况下,磁盘存储会保存 7 天 Consumer
Kafka 架构 • kafka 集群运行流程图 consumer group topic producer Consumer-A broker(1) Producer-A 13 7 4 partition 1 Consumer-B 12 8 2 partition 2 broker(2) Producer-B Consumer-C 11 10 9 partition 3 6
Kafka 架构 • topic & partition producer 怎 么保证业务有 producer 序? consumer group topic Consumer-A broker(1) Producer-A 13 7 4 partition 1 Consumer-B 12 8 2 partition 2 broker(2) Producer-B 1、每个 partition 对应一个文件(夹) Consumer-C 2、分文件存储利于增加 topic 消息容量 11 10 9 6 3、把 partition 放在不同磁盘上,可以提高读写性能 partition 3 4、把 partition 分散在不同机器上,支持负载均衡 5、通过迁移单个 partition, 实现快速水平扩展 6、partition内有序,partition间无序
Kafka 架构 consumer 处 理速度跟不上 怎么办? • producer consumer group topic producer Consumer-A broker(1) Producer-A 13 7 4 partition 1 Consumer-B 12 8 2 partition 2 broker(2) Producer-B 1、自定义 partitioner, 保证同族消息保存在相同 Consumer-C partition 中,默认为 hash 算法随机分配 11 10 9 6 2、异步提交时,会把多个消息合并,提高IO性能 partition 3 3、如果对 topic 进行水平扩容,producer 需要重新 获取 broker 列表,重新连接
Kafka 架构 不同的 consumer Group 之间有 什么关系? • consumer group topic producer Consumer-A broker(1) Producer-A 13 7 4 partition 1 Thread-A Consumer-B 12 8 2 partition 2 broker(2) Producer-B Thread-B Consumer-C 11 10 9 6 Thread-C 1、一个 partition 只会被一个 consumer 线程连接; partition 3 2、一个 consumer group 由多个 consumer 线程组成; 3、一个 consumer group 可以同时被多个进程使用。
Kafka 架构 • consumer group 注:Group A 和 Group B 会收到的是完全相同的消息
Kafka 架构 • kafka 在 zookeeper 中的数据
Kafka 命令 • 数据分区和水平扩展 – 1、创建一个 16 分区,双备的 topic . /bin/kafka-topics. sh --create --zookeeper 10. 10. 200: 2181 把一个partition的 --replication-factor 2 replica从broker 1, 2 --partitions 16 --topic my-topic 迁移到 broker 1, 4上 – 2、水平扩展. /bin/kafka-reassign-partitions. sh --execute --manual-assignment-json-file partitions-to-move. json cat partitions-to-move. json: {"partitions": [{"topic": "my-topic", "partition": 1, "replicas": [1, 4] }]}
Kafka 性能报告(B) <1 k, 83 MB/s>
























