常用的消息队列有哪些?各自的特点是什么?
1.ZeroMQ
号称最快的消息队列系统,尤其针对大吞吐量的需求场景。
扩展性好,开发比较灵活,采用 C 语言实现,实际上只是一个 socket 库的重新封装,如果做为消息队列使用,需要开发大量的代码。ZeroMQ 仅提供非持久性的队列,也就是说如果 down 机,数据将会丢失。其中,Twitter 的 Storm 中使用 ZeroMQ 作为数据流的传输。
2.RabbitMQ
结合 erlang 语言本身的并发优势,支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。
性能较好,但是不利于做二次开发和维护。
3.ActiveMQ
历史悠久的开源项目,是 Apache 下的一个子项目。已经在很多产品中得到应用,实现了 JMS1.1 规范,可以和 spring-jms 轻松融合,实现了多种协议,不够轻巧(源代码比 RocketMQ 多),支持持久化到数据库,对队列数较多的情况支持不好。
- RocketMQ
RocketMQ 出自阿里的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进,消息可靠性上比 Kafka 更好。RocketMQ 在阿里内部被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog 分发等场景。 5. Redis
做为一个基于内存的 K-V 数据库,其提供了消息订阅的服务,可以当作 MQ 来使用,目前应用案例较少,且不方便扩展。对于 RabbitMQ 和 Redis 的入队和出队操作,各执行 100 万次,每 10 万次记录一次执行时间。
其它问题
- thrift 的通信方式 oneway 是什么意思?什么场景下适用?
- 分布式事务如何实现?
- elasticsearch 的原理?
- influxdb 的原理?常用的时序数据库有哪些?
- 常用的缓存有哪些?重点是 redis?
- 非关系型数据库,hbase,mongodb 的原理。
- leveldb 的原理
- lsm tree 的原理
- rocketMq
- 消息队列如何保证消息不重、不丢、不漏?
十三、消息队列
- 消息队列的主要作用?
- 消息队列的优缺点?
- 如何保证消息队列的高可用?
- 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
- 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?
- 如何保证消息的顺序性?
- 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
- 如果让你写一个消息队列,该如何进行架构设计?说一下你的思路
- RabbitMQ 有哪些重要的角色?有哪些重要的组件?
- RabbitMQ 怎么避免消息丢失?
- 要保证消息持久化成功的条件有哪些?
- RabbitMQ 有几种广播类型?
- RabbitMQ 怎么实现延迟消息队列?
- Kafka 可以脱离 zookeeper 单独使用吗?为什么?
- Kafka 有几种数据保留的策略?
十四、RabbitMQ
135.rabbitmq 的使用场景有哪些?
136.rabbitmq 有哪些重要的角色?
137.rabbitmq 有哪些重要的组件?
138.rabbitmq 中 vhost 的作用是什么?
139.rabbitmq 的消息是怎么发送的?
140.rabbitmq 怎么保证消息的稳定性?
141.rabbitmq 怎么避免消息丢失?
142.要保证消息持久化成功的条件有哪些?
143.rabbitmq 持久化有什么缺点?
144.rabbitmq 有几种广播类型?
145.rabbitmq 怎么实现延迟消息队列?
146.rabbitmq 集群有什么用?
147.rabbitmq 节点的类型有哪些?
148.rabbitmq 集群搭建需要注意哪些问题?
149.rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?
150.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?
151.rabbitmq 对集群节点停止顺序有要求吗?
十五、Kafka
152.kafka 可以脱离 zookeeper 单独使用吗?为什么?
153.kafka 有几种数据保留的策略?
154.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?
155.什么情况会导致 kafka 运行变慢?
156.使用 kafka 集群需要注意什么?