本文概述
什么是RabbitMQ?
RabbitMQ是使用最广泛的通用开放源消息代理。它于2007年发布,是邮件系统的主要组件。当前,它用于流使用案例。 RabbitMQ能够处理后台任务或充当微服务之间的消息代理。它帮助Web应用程序减少了负载。而且,它减少了那些耗时的任务或资源的服务器交付时间。
什么是Apache Kafka?
Apache Kafka还是一个开源的分布式发布/订阅消息系统。它于2011年发布,用作两个应用程序之间的中间存储。生产者将消息编写并存储在Kafka集群中。另一方面,使用者使用来自群集的消息。它还可以减少繁重消息的缓慢传递。
Apache Kafka vs.RabbitMQ
参量 | Apache Kafka | RabbitMQ |
---|---|---|
Distribution | Kafka使用者通过主题分区进行分发。每个使用者一次消耗来自特定分区的消息。 | 每个队列实例都有许多使用者。这些消费者被称为竞争性消费者, 因为他们彼此竞争以消费消息。但是, 该消息只能被处理一次。 |
High Availability | 借助zookeeper, 它可以管理Kafka群集的状态并支持高可用性。 | 通过群集和高可用队列, 可以提供高性能的数据复制。因此, 它还提供了高可用性。 |
Performance | 它可以用更少的硬件在一秒钟内处理数百万条消息。 | 它也可以在一秒钟内处理数百万条消息, 但是需要更多数量的硬件。 |
Replication | Kafka中有可用的复制代理, 当主代理关闭时可以使用。 | 在这里, 队列不会自动复制。该配置是强制性的。 |
Multi subscriber | 多种使用者类型可以订阅许多消息到Kafka。 | 尽管消息被路由到各种队列, 但是队列中只有一个使用者可以处理消息。 |
Message Protocols | Apache Kafka支持诸如int8, int16等原语和二进制消息。 | 它支持任何标准队列协议, 例如STOMP, AMQP, HTTP等。 |
Message Ordering | 消息排序仅存在于分区内。它保证要么全部失败要么一起失败。 | 它通过单个AMQP通道保持流的顺序。此外, 它还在其队列逻辑内对重发的数据包进行重新排序, 这将防止使用者对缓冲区进行重新排序。 |
Message lifetime | 它包含一个日志文件, 可随时阻止所有消息。 | 由于它是一个队列, 因此一旦消耗掉的消息将被删除, 并收到确认。 |
Architecture | 高度可扩展的发布/订阅分布式消息传递系统。它在Kafka集群中具有代理, 主题, 分区和主题。 | 通用发布/订阅消息代理。它的结构与Kafka不同, 因为它由队列组成。 |
Use Cases | 它主要用于流数据。 | Web服务器主要使用它来立即响应请求。 |
Transactions | 它支持那些表现出“读过程写”的事务。与Kafka主题之间执行的模式。 | 即使事务只放一个队列, 它也不保证原子性。 |
Language | Apache Kafka是使用JVM用Scala编写的。 | RabbitMQ用Erlang编写。 |
Routing Support | 它支持复杂的路由方案。 | 它不支持复杂的路由方案。 |
Developer Experience | 随着高增长, 它带来了良好的经验。但是, 它仅支持Java客户端。 | RabbitMQ带有成熟的客户端库, 它们支持Java, PHP, Python, Ruby等。 |
评论前必须登录!
注册