游龙战神|「事件驱动架构」何时使用RabbitMQ或 Kafka?

如果你问自己是否Apache Kafka比RabbitMQ更好或RabbitMQ是否比Apache Kafka更可靠 , 我想在这里阻止你 。 本文将从更广泛的角度讨论这两种情况 。 它关注的是这两个系统提供的功能 , 并将指导您做出正确的决定 , 决定何时使用哪个系统 。
web上的一些文章让Apache Kafka在RabbitMQ面前大出风头 , 而另一些文章则恰恰相反 。 我们中的很多人可能会因为听了大肆宣传 , 跟着人群跑而认罪 。 我觉得重要的是要知道是使用RabbitMQ还是Kafka取决于您项目的需求 , 只有当您在合适的场景中使用了正确的设置 , 才能进行真正的比较 。
我和84codes在业界工作了很长时间 , 通过服务CloudAMQP为RabbitMQ提供托管解决方案 , 通过服务CloudKarafka为Apache Kafka提供托管解决方案 。 由于我已经看到了CloudAMQP和CloudKarafka用户的许多用例和不同的应用程序设置 , 我觉得我可以根据我的经验 , 在RabbitMQ和Apache Kafka上权威地回答用例问题 。
在本文中 , 我的任务是根据多年来开发人员与开发人员之间的许多交谈来分享自己的见解 , 并试图传达他们关于为什么选择特定的message broker服务而不是其他服务的想法 。
本文中使用的术语包括:
消息队列在RabbitMQ中是一个队列 , 而这个“队列”在Kafka中被称为日志 , 但是为了简化本文中的信息 , 我将一直使用队列而不是切换到“日志” 。
卡夫卡的信息通常被称为记录 , 但是 , 为了简化这里的信息 , 我将再次提到信息 。
当我在Kafka中撰写一个主题时 , 您可以把它看作是消息队列中的一个分类 。 卡夫卡主题被分成若干分区 , 这些分区以不变的顺序包含记录 。
这两个系统都通过队列或主题在生产者和消费者之间传递消息 。 消息可以包含任何类型的信息 。 例如 , 它可以包含网站上发生的事件的信息 , 也可以是触发另一个应用程序上的事件的简单文本消息 。
这种系统非常适合于连接不同的组件、构建微服务、实时数据流或将工作传递给远程工作者 。
根据Confluent的数据 , 超过三分之一的财富500强公司使用Apache Kafka 。 各种大型行业也依赖于RabbitMQ , 如Zalando、WeWork、Wunderlist和Bloomberg 。
游龙战神|「事件驱动架构」何时使用RabbitMQ或 Kafka?
游龙战神|「事件驱动架构」何时使用RabbitMQ或 Kafka?最大的问题;什么时候使用Kafka , 什么时候使用RabbitMQ?不久前 , 我在Stackoverflow上写了一个答案来回答这个问题 , “有任何理由使用RabbitMQ而不是Kafka吗?”答案只有几行字 , 但它已经被证明是一个许多人发现有用的答案 。
我将试着把答案分解成子答案 , 并试着解释每一部分 。 首先 , 我写道——“RabbitMQ是一个可靠的、成熟的、通用的消息代理 , 它支持一些协议 , 如AMQP、MQTT、STOMP等 。 RabbitMQ可以处理高吞吐量 。 它的一个常见用例是处理后台作业或充当微服务之间的消息代理 。 Kafka是一个消息总线优化的高接入数据流和重放 。 Kafka可以看作是一个持久的消息代理 , 应用程序可以在其中处理和重新处理磁盘上的流数据 。
关于“成熟”一词;RabbitMQ在市场上出现的时间比Kafka(分别是2007年和2011年)要长 。 RabbitMQ和Kafka都是“成熟的” , 这意味着它们都被认为是可靠的、可扩展的消息传递系统 。
消息处理(消息重放)这是他们之间的主要区别;与大多数消息传递系统不同 , Kafka中的消息队列是持久的 。 发送的数据将一直存储到经过指定的保留期(一段时间或一个大小限制)为止 。 消息将一直停留在队列中 , 直到超过保留期/大小限制 , 这意味着消息被使用后不会被删除 。 相反 , 它可以被重放或多次使用 , 这是一个可以调整的设置 。