Kafka Vs RabbitMQ
Kafka 对比 RabbitMQ
什么是RabbitMQ?
RabbitMQ 是使用最广泛、通用和开源的消息代理。它于 2007 年发布,是消息传递系统中的主要组件。目前,它用于流式用例。 RabbitMQ 能够处理后台任务或充当微服务之间的消息代理。它帮助 Web 应用程序减少了负载。此外,它减少了那些耗时的任务或资源的服务器交付时间。
什么是 Apache Kafka?
Apache Kafka 也是一个开源分布式发布/订阅消息系统。它于 2011 年发布,用作两个应用程序之间的中间存储。生产者将消息写入并存储在 Kafka 集群中。另一方面,消费者消费来自集群的消息。它还减少了大量消息的缓慢传递。
Kafka Vs。 RabbitMQ
参数 |
Apache Kafka |
RabbitMQ |
分布 |
Kafka 消费者通过主题分区进行分发。每个消费者一次消费来自特定分区的消息。 |
每个队列实例都有许多消费者。这些消费者被称为竞争消费者,因为他们相互竞争以消费消息。但是,消息只能处理一次。 |
高可用性 |
在zookeeper的帮助下,管理Kafka集群的状态,支持高可用。 |
通过集群和高可用队列提供高性能数据复制。因此,它还提供了高可用性。 |
性能 |
它可以用更少的硬件在一秒钟内处理数百万条消息。 |
它也可以在一秒钟内处理数百万条消息,但需要更多的硬件。 |
复制 |
Kafka 中有可用的复制代理,它在主代理宕机时工作。 |
在这里,队列不会自动复制。配置是强制性的。 |
多订阅者 |
多个消费者类型可以向Kafka订阅多条消息。 |
虽然消息被路由到不同的队列,但只有一个队列中的一个消费者可以处理消息。 |
消息协议 |
Apache Kafka 支持 int8、int16 等原语和二进制消息。 |
这支持任何标准队列协议,例如 STOMP、AMQP、HTTP 等。 |
消息排序 |
消息排序仅存在于分区内。它保证要么全部失败,要么一起通过。 |
它通过单个 AMQP 通道维护流的顺序。此外,它还在其队列逻辑内对重传的数据包进行重新排序,以防止消费者对缓冲区重新排序。 |
消息生命周期 |
它包含一个日志文件,可以随时阻止所有消息。 |
由于它是一个队列,一旦被消费的消息就会被移除,并收到确认。 |
架构 |
高度可扩展的发布/订阅分布式消息传递系统。它在 Kafka 集群中有代理、主题、分区和主题。 |
一个通用的发布/订阅消息代理。它的架构与 Kafka 不同,因为它由队列组成。 |
用例 |
主要用于流式传输数据。 |
Web 服务器主要使用它来立即响应请求。 |
交易 |
它支持那些表现出"读-处理-写?"的事务。向/从 Kafka 主题执行的模式。 |
即使事务只占用一个队列,它也不能保证原子性。 |
语言 |
Apache Kafka 是用 Scala 和 JVM 编写的。 |
RabbitMQ 是用 Erlang 编写的。 |
路由支持 |
支持复杂的路由场景。 |
不支持复杂的路由场景。 |
开发者体验 |
随着高速增长,它带来了良好的体验。但是,它只支持 Java 客户端。 |
RabbitMQ 带有成熟的客户端库,支持 Java、PHP、Python、Ruby 等。 |