文章翻译|RabbitMQ vs Apache Kafka: An opinionated point of view

98 阅读2分钟

文章链接:kafkaide.com/learn/rabbi…

本文比较常见数据库 RabbitMQ 与 Apache Kafka

简单介绍

RabbitMQ 和 Apache Kafka 是可以处理高吞吐量数据的队列。一般来说,他们会被用于在不同的应用程序之间进行通信,这个功能可以使我们将一个服务拆解成多个微服务,这些微服务共同构成之间的系统,通过拆分服务,我们可以提高服务的可拓展性。

主要区别——持久性

目前,RabbitMQ 与 Apache Kafka最大的区别就是 Apache Kafka可以像数据库一样的使用,我可以在kafka中无限期的保存这些应用程序之间的消息记录,而如果我们使用RabbitMQ时,在确认某个消息已经被处理后,这个消息会从队列中被删除。消息记录也丢失了。而在kafka中,理论上我们可以一直存储这些消息记录。

RabbitMQ的优点

有的时候使用RabbitMQ更合适,想想一个场景,一个队列中存储的消息代表需要完成的工作,有一些工作人员并发的消费这条消息,通过消费,工作人员知道哪些工作需要被处理,一旦工作人员完成工作,他们会确认该消息已处理。这个时候就可以删除消息。 但在kafka中,通常需要批量确认或提交消息来表示这个动作。如果一条消息处理失败要怎么办呢?在 RabbitMQ 中,您只需将该消息重新发布回队列以供将来处理。在 Apache Kafka 中,由于您希望保持一致的状态,因此推送两次相同的消息。有的时候可能会出现问题,比如购买订单事件,必然不希望处理两次这种消息,所以可能需要额外的队列来解决这类业务场景。比如“死信队列”。

RabbitMQ不易于水平拓展。

如标题所描述,RabbitMQ不易于水平拓展。

有趣的问题

队列是否可以在消费者消费完数据后保留数据?

Apache Kafka 可以,每个消费者都可以在该队列中的任何偏移处读取,并且消费者与消费者之间是独立的。

RabbitMQ 并不可以, 一旦消费者开始处理消息,这条被处理的消息就不会被提供给其他人。

来自kafka团队的警告

RabbitMQ 进入该行业的时间要长得多,可用的工具比 Apache Kafka 更丰富。

运行和维护 RabbitMQ 通常比使用 Apache Kafka 更简单。除非您选择像Confluence这样的云解决方案,否则管理 Apache Kafka 集群通常会比较麻烦,并且需要更深入的 DevOps 和系统管理知识。 当然kafka也在积极改变(此处请考虑该文章的时效性。)