我正在开发 Apache Kafka 。我想知道哪一个更好: Kafka 或 ActiveMQ 。这两种技术的主要区别是什么? 我想在Spring MVC中实现 Kafka 。
答案 0 :(得分:31)
Kafka和ActiveMQ可能有一些重叠,但它们最初是为不同目的而设计的。因此,比较它们就像比较Apple和Orange。
<强>卡夫卡强>
Kafka是一个分布式流媒体平台,具有非常好的水平扩展功能。它允许应用程序在磁盘上处理和重新处理流式数据。由于它的高吞吐量,它通常用于实时数据流。
<强>的ActiveMQ 强>
ActiveMQ是一种通用的消息代理,支持多种消息传递协议,如AMQP,STOMP,MQTT。它支持更复杂的消息路由模式以及Enterprise Integration Patterns。通常,它主要用于应用程序/服务之间的集成,尤其是Service Oriented Architecture。
答案 1 :(得分:9)
我认为在讨论中应该注意哪些经纪人(以及Kafka出现时)应该注意的是经常引用的Kafka benchmark显示了任何现代分布式计算机的上限。今天的经纪人的MB / s总容量大致相同。与其他代理相比,Kafka在处理小消息(10-1024字节)方面做得非常好,但仍然限制在大约75 Mb / s的标记。
在谈论“聚类”时经常会有一个苹果与橘子的比较。 ActiveMQ和其他企业代理集群发布消息和跟踪消费者订阅。 Kafka集中发布并要求消费者跟踪订阅。似乎很小,但它有显着的差异。
所有经纪人都有相同的背压问题 - Kafka可以做一个“懒惰的持久性”,生产者不会等待经纪人同步到磁盘......这对许多用例都有好处,但可能ppatierno在他的幻灯片放映中提到的不是我关心的每一条消息情景。
Kafka非常适合横向扩展,例如小型消息的大数据处理。 ActiveMQ更适用于经常被称为企业消息传递的用例类(这只是一个术语,并不意味着Kafka对企业不利) - 交易数据(尽管Kafka正在添加此信息)..信息亭..零售店..存储和转发.. dmz遍历..数据中心到数据中心发布..等等
答案 2 :(得分:9)
Kafka体系结构与ActiveMQ不同。
在Kafka中,生产者将消息发布到主题,这是特定类型的消息流。消费者将通过提取数据来订阅经纪人的一个或多个主题。
主要区别:
Kafka生产者 不等待经纪人的确认 。如果代理可以像生产者一样快地处理消息,则总体吞吐量将很高。 ActiveMQ必须维护每个消息的传递状态。
Kafka具有 更有效的存储格式 。平均而言,每条消息在Kafka中的开销为9字节,而在ActiveMQ中为144字节。这表示ActiveMQ使用了70% 比Kafka更大的空间。
Kafka是基于 pull 的邮件系统,而ActiveMQ是基于 push 的邮件系统。发布者将向ActiveMQ中的所有使用者发送消息。消费者将在自己的时间在Kafka提取消息。
在卡夫卡-消费者可以倒回旧的偏移量并重新使用数据。当您解决某些问题并决定在解决问题后重播旧消息时,此功能很有用。
由于上述效率,Kafka吞吐量是ActiveMQ和RabbitMQ等普通邮件系统的2倍至4倍。
更多详细信息,请访问notes.stephenholiday.com
答案 3 :(得分:1)
我每周都会听到这个问题...虽然ActiveMQ(通常与IBM MQ或JMS类似)用于传统消息传递,但是Apache Kafka被用作流媒体平台(消息传递+分布式存储+数据处理)。两者都是针对不同的用例而构建的。
您可以将Kafka用于“传统消息传递”,但不能将MQ用于特定于Kafka的方案。
文章“ Apache Kafka与企业服务总线(ESB)—朋友,敌人还是Frenemies?(https://www.confluent.io/blog/apache-kafka-vs-enterprise-service-bus-esb-friends-enemies-or-frenemies/)”讨论了Kafka为何不具有竞争力而是对集成的补充和补充。消息传递解决方案(包括ActiveMQ)以及如何集成两者。