「走进消息队列」| 青训营笔记

105 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第五篇笔记。

消息队列

支持高吞吐,高并发,高可用的队列。

Kafka

使用场景

  • 日志信息
  • Metrics数据(程序状态的采集)
  • 用户行为(搜索,点赞,评论,收藏...)

如何使用Kafka

  1. 创建集群
  2. 新增Topic
  3. 编写生产者逻辑
  4. 编写消费者逻辑

基本概念

image.png

  • 一个topic为一个业务的逻辑队列,一个topic可以有多个parttion(分区),分区之间是并发处理的。
  • 每个partition有多个Replica。Leader Replica会从ISR(In-Sync-Replica)中选出。其他的follower会与leader有一定的差距,如果差距超过规定会被踢出ISR。这样如果leader所在的机器宕机,可以从follower中恢复。

架构

image.png

  • Broker为集群的节点
  • ZooKeeper与controller(Broker中的一个)配合,存储集群元信息,包含分区分配信息等

帮助Kafka提高吞吐性能和稳定性的功能:

  • Producer: 批量发送,数据压缩
  • Broker: 顺序写,消息索引,零拷贝
  • Consumer: Rebalance

问题

重启,替换,缩容,扩容都需要数据复制,分钟级甚至天级。

BMQ

  • 兼容Kafka协议,存算分离(Broker里的数据拿出来放到另一个分布式存储系统如hdfs中),云原生消息队列。
  • 重启,替换,缩容,扩容均为秒级。

Databus

解决直接使用原生SDK的问题

  • 简化消息队列客户端复杂度
  • 解耦业务与Topic
  • 缓解集群压力,提高吞吐

Mirror

使用Mirror通过最终一致的方式,解决跨region读写的问题。

image.png

Index

直接在BMQ中将数据结构化,配置索引DDL,异步构建索引后,通过Index Query服务读出数据

RocketMQ

应用于秒杀场景

image.png