点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
系统解耦 允许生产者和消费者独立操作,不需要直接知道对方的存在,这种解耦性使系统更加灵活和可维护。 异步通信 允许生产者继续工作而不必等待消息被处理,提高系统的性能和响应速度。 流量削峰 在访问量剧增的情况下,消息中间件能够使关键组件顶住增长的访问压力,而不是因为超出负荷的请求而完全崩溃。 消息持久性 消息通常会被持久化,即使消息中间件或消费者出现故障,消息也不会丢失。 扩展性 通过增加消息中间件的容量,可以轻松应对更多的消息流量和消费者。
功能
优先级队列、延迟队列、死信队列、消费模式(pull/push)、广播消费、消息回溯、消息堆积+持久化、消息追踪(链路条,方便定位)、消息过滤、多协议支持(通用性)、跨语言支持(流行程度)、流量控制、消息顺序性、安全机制、消息幂等性、事务性消息等。
性能
一般是指其吞吐量,性能和功能很多时候是相悖的,鱼和熊掌不可兼得。
高可靠
可靠性主要在于消息的持久化这一块(消息只要写入就一定会被消费,不会因为故障导致数据丢失。
如果是从系统的角度来看就得从整体的维度去衡量了(不能单单只靠消息中间件本身,要从生产端、服务端、消费端三个维度去保障)。
社区力度及生态发展
社区是否活跃,是否在持续不断的进行迭代。
由于erlang语言的特性,mq 性能较好,高并发; 吞吐量到万级,MQ功能比较完备 健壮、稳定、易用、跨平台、支持多种语言、文档齐全; 开源提供的管理界面非常棒,用起来很好用 社区活跃度高。
复杂性 RabbitMQ比其他一些消息队列(如Kafka)更复杂,学习曲线更陡峭。 性能 在高并发和低延迟的情况下,RabbitMQ的性能可能不如一些其他消息队列。 持久化 虽然RabbitMQ支持消息的持久化存储,但在高负载下,持久化操作可能会影响性能。 确认机制 RabbitMQ的消息确认机制可能会影响性能,并且在特定情况下可能会导致消息丢失。
兼容 JMS ActiveMQ 支持 JMS(Java Message Service)规范,这使得使用 Java 技术栈的开发者能够更容易地集成。 跨语言 ActiveMQ 支持多种语言的客户端,如 Java, C, C++, Python, Ruby 等,因此可以用于多语言环境。 成熟稳定 ActiveMQ 已经被很多大型企业使用,并且有着广泛的社区支持。 支持多种协议 除了 JMS,ActiveMQ 还支持 AMQP(高级消息队列协议)和 STOMP(简单文本导向消息协议)等。 支持集群和负载均衡 ActiveMQ 支持多种集群方式,可以配置成主从或者负载均衡模式。 支持事务和可持久化 ActiveMQ 支持事务,并且可以将消息持久化到磁盘,以防止数据丢失。
性能问题 在高并发的情况下,ActiveMQ 的性能可能不如一些其他的消息队列(如 Kafka、RabbitMQ)。 社区活跃度 在某些时候,相对较小的社区可能会导致在特定问题上的支持不够全面或者需要等待更新。 管理和监控 ActiveMQ 的管理和监控界面相对简单,一些复杂的管理和监控功能可能需要第三方工具或者插件来支持。 版本迭代 随着时间的推移,ActiveMQ 的新版本可能会引入不兼容的更改,这可能需要开发者进行相应的适配。
稳定性 RocketMQ支持高可用,通过Replica集群方式保证服务的可用性。 性能 RocketMQ单集群能够承载千万级的消息堆积,支持超大规模的消息处理。 可靠性 提供了三种级别的消息传递保证,保证消息的可靠投递。 扩展性 RocketMQ支持集群的水平扩展,能够根据业务需求灵活扩展集群规模。 高并发 支持高并发的消息进行和拉取,满足高并发场景下的消息处理需求。 多语言支持 RocketMQ提供了多种语言的客户端,如Java, C++, Python等,方便多语言环境下的使用。
支持的客户端语言不多,目前是java及c++; RocketMQ社区关注度及成熟度也不及前两者; 没有web管理界面,提供了一个CLI(命令行界面)管理工具带来查询、管理和诊断各种问题; 没有在 mq 核心中去实现JMS等接口。
客户端语言丰富,支持java、.net、php、ruby、python、go等多种语言; 性能卓越,单机写入TPS约在百万条/秒,消息大小10个字节; 提供完全分布式架构, 并有replica机制, 拥有较高的可用性和可靠性, 理论上支持消息无限堆积; 支持批量操作; 消费者采用Pull方式获取消息, 单分区消息有序; 有优秀的第三方Kafka Web管理界面Kafka-Manager; 在日志领域比较成熟,被多家公司和多个开源项目使用。
系统依赖性 Kafka集群依赖于ZooKeeper,若ZooKeeper出现问题,将影响Kafka服务。 单点故障 Kafka单个broker的故障会影响整个系统的可用性。 性能瓶颈 Kafka的性能可能会随着集群负载的增加而下降,需要额外的性能测试。 持久化存储 Kafka的持久化存储依赖于文件系统,文件系统的I/O瓶颈可能会影响Kafka性能。 消息重复 Kafka不保证消息不会重复,需要在消费者端实现消息去重逻辑。 水平扩展限制 Kafka的水平扩展能力相对有限,扩展前需要考虑重新平衡和数据迁移。


本文作者:王经纬(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




