几种消息队列中间件的对比

  1. 为什么使用消息队列?
    解耦、异步、削峰
  2. 消息队列的优点和缺点?
    缺点:
    ● 系统可用性降低-如mq挂掉,下游系统都可能会出现故障
    ● 系统复杂性变高
    ● 一致性问题
  3. kafka、activemq、rabbitmq、rocketmq都有什么区别以及适合哪些场景?
特性 ActiveMQ RabbitMQ RocketMQ Kafka
单机吞吐量 万级 万级 10万级 10万级,一般配合大数据进行实时数据计算日志采集
topic数量对吞吐量的影响 topic可以达到几百、几千级别, 几十到几百个吞吐量会大幅度下降,同等机器下尽量保证topic数量不要过多
时效性 ms级 微秒级,延迟最低 ms级 ms以内
可用性 高,基于主从架构 同activemq 分布式架构 分布式,一个数据多个副本
消息可靠性 有较低的概率丢失 经过参数优化可以做到0丢失 同rocketmq
功能支持 mq功能完备 基于erlang开发,并发能力极强 功能完善,扩展性好 功能简单
优劣势 非常成熟,功能成熟,偶尔会有较低概率丢失消息,社区以及应用越来越少,官方维护也在减少 erlang开发,性能好,延迟低,mq功能完备,社区活跃吞吐量相对比较低,erlang语言问题 java源码,阿里,性能好,扩展方便,可以支撑大规模topic数量,社区活跃度相对较低 消息容易重复
  1. 高可用如何保证
    rabbitmq:镜像集群模式-创建queue的数据会在所有节点上存在
    kafka:(broker,topic,partition)副本机制
    rocketmq:master(brokerid=0),slave集群
  2. 幂等性
    利用数据库主键,redis设置key
  3. 可靠性传输
    rabbitmq:事务机制(基于同步机制会导致吞吐量降低),channel confirm模式,rabbitmq开启持久化功能(设置channel持久化、发送消息时设置消息持久化),消费者消费autoAck机制
    kafka:消费端关闭自动提交offset改为手动提交,topic设置replication.factor值大于1,kafka服务端设置min.insync.replicas大于1,producer端设置acks=all,设置retries=Max无限次重试

你可能感兴趣的:(知识分享,中间件,kafka,java)