Apache Kafka与RabbitMQ的比较

1. 什么是RabbitMQ

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。

RabbitMQMQ的一种,它是一个开源消息代理软件(有时称为面向消息的中间件),最初实现了高级消息队列协议(AMQP),后来扩展了插件架构,支持流式文本消息传递协议(STOMP),消息排队遥测传输(MQTT)和其他协议。

RabbitMQ的输出设计理念是:

  • 发布消息到队列(通过交换点)。

  • 多个消费者可以连接到队列。

  • 消息代理在所有可用的消费者之间分发消息

  • 如果消费者读取消息失败,代理可以重新发送消息。

  • 对于具有单个消费者的队列保证传递顺序(当队列具有多个使用者时,这是不可能的)。

2. Apache KafkaRabbitMQ的区别

Apache Kafka

RabbitMQ

它是什么?

对于高入口数据流,Apache Kafka是一种优化的消息总线。

一个可靠,成熟,通用的消息代理,支持AMQP等各种标准化协议

来源

Scala中开发,由LinkedIn开发的作为连接不同内部系统的一种工具,后来被转交给Apache Software Foundation。它在事件驱动的体系结构中很有用。

开发用于实现AMQP,这是一种具有强大路由功能的开放式消息传递协议。

主要用途

构建处理磁盘上的流数据的应用程序。

它处理高吞吐量和可靠的后台作业,以及应用程序内部和应用程序之间的通信和集成。

许可

遵循Apache License 2.0的开源软件。

遵循Mozilla Public License的开源。

开发语言

Scala

Erlang

客户端库

有许多客户端库,包括RubyPythonNode.jsJava

包含许多成熟的库,如RubyPythonNode.jsClojureGoJavaC.

开发

虽然它只提供Java客户端,但是社区开源客户端、生态系统项目不断增加,而且作为适配器SDK可以让你构建自己的系统集成Kafka。大部分配置都是由.properties文件执行的。

它的客户端库已经成熟并且文档齐全,并正式支持以下内容:JavaSpring.NETPHPPythonRubyJavaScriptGoElixirObjective-CSwift,以及通过社区插件可以支持许多其他客户端和开发工具。

是否支持HAHigh Availability

是否支持联合队列(Federated Queue

是。此功能提供了一种平衡跨节点或集群的单个队列的负载的方法。

复杂路由方案

Apache Kafka能够执行复杂的路由方案。

它无法执行执行的路由方案。

托管解决方案和企业支持

可以从CloudKarafka获得。CloudKarafka最早使用免费托管的Apache Kafka作为服务计划。

可以从CloudAMQP获得。   CloudAMQP正在运营并为全球最大的RabbitMQ集群提供支持。

3. 需求和用例

a. Kafka

我们列出了Kafka的一些最佳应用场景,例如:

  • 通过Kafka,不用经过复杂的路由,流就可以以最大的吞吐量(100k / sec +)从A传输到B,并按分区顺序至少传送一次。

  • 应用程序需要按分区顺序至少访问一次流的历史记录,我们可以说它是一个持久的消息存储,并且也可以根据需要让客户端获得事件流的重放。而这在更传统的消息代理中是那个的不可能的,因为一旦消息被传递,它就被删除了。

  • 为了执行流处理

  • 为了事件溯源

b. RabbitMQ

以下列出了RabbitMQ的一些最佳应用场景,例如:

  • 为了使用现有协议的任何组合,例如AMQP 0-9-1STOMPMQTTAMQP 1.0

  • 需要对每个消息(dead letter queues等)进行更精细的一致性控制/保证,RabbitMQ最近增加了对事务更好的支持。

  • 应用程序需要点对点、请求/回复以及发布/订阅消息传递的多样性。

  • 通过non-trivial路由逻辑集成多个服务/应用程序来处理到消费者的复杂路由。

Apache Kafka与RabbitMQ的比较

发表评论

邮箱地址不会被公开。 必填项已用*标注

70 ÷ = 十四

滚动到顶部