消息队列 | 青训营笔记

56 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

消息队列对比

  • kafka: 分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
  • RocketMQ: 低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
  • Pulsar: 是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用存算分离的架构设计
  • BMQ: 和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群

Kafka

第一步:首先需要创建一个Kafka集群。

第二步:需要在这个集群中创建一个Topic,并且设置好分片数量

第三步:引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的HelloWorld发送出去

第四步:引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到你刚刚发送的HelloWorld

遇到的问题

  1. 复制内容时间成本高:kafka通过副本进行容灾,达到高可用。而重启必须顺序重启。需要使用大量时间。

  2. 负载均衡难以设计。如果IO过高希望减少IO,可以将部分partition迁出broker,而迁出broker也需要IO读写。

BMQ

兼容Kafka协议,存算分离,云原生消息队列。

生产者、消费者与Kafka等同。而与Broker之间加入了Proxy。底层新增分布式文件存储系统。生产者生产消息后,proxy转交给broker写入;消费者读取消息时,proxy转发给分布式存储系统读取。

对于重启、替换、扩容、缩容,Kafka至少需要分钟级别,BMQ实现秒级。

RocketMQ

高级特性

  • 事务场景
  • 事务消息
  • 延迟发送
  • 延迟消息
  • 处理失败
  • 消费重试
  • 死信队列