ActiveMQ和Kafka简介
Apache ActiveMQ是基于Java的开源多协议消息传递服务器。它实现了JMS(Java消息服务)API,并且能够支持各种消息传递协议,包括AMQP,STOMP和MQTT。它通常用于在应用程序/服务之间发送消息。在本主题中,我们将学习ActiveMQ vs Kafka。
另一方面,Apache Kafka是由LinkedIn开发的开源流处理软件(后来捐赠给Apache),用于有效地管理其不断增长的数据并从批处理切换到实时处理。它使用Scala和Java编写,并基于消息的发布-订阅模型。
ActiveMQ和Kafka之间的主要区别
ActiveMQ和Kafka设计用于不同的目的。以下是主要区别:
Kafka是提供高水平可伸缩性的分布式流媒体平台。另外,它提供了高吞吐量,这就是为什么它用于实时数据处理。ActiveMQ是支持各种消息传递协议的通用消息传递解决方案。Kafka比ActiveMQ快得多。它每秒可以处理数百万条消息。
ActiveMQ支持消息队列和发布/订阅消息传递系统。另一方面,Kafka基于发布/订阅,但确实具有消息队列的某些优点。
ActiveMQ保证将传递一条消息,但是对于Kafka,很有可能(但是低)一条消息可能不会传递。
在以下情况下,Kafka中的消息可能会丢失:
它可能在并行使用消息时发生。考虑一种情况,其中有两条消息发送给使用者:X和Y。这两个消息是并行处理的。在处理消息时,Y成功并提交了偏移量。但是,在处理消息时,X产生了错误。考虑到消息B的偏移量较大,Kafka将保存最新的偏移量,并且消息A永远不会返回给使用者。
与在Kafka中相比,在ActiveMQ中实施完全一次消息传递要容易得多。在以下情况下,卡夫卡中的重复邮件传递可能会发生:
使用者已经成功使用了消息,然后将消息提交到其本地存储,但是它崩溃了,无法在偏移发生之前将偏移量提交给Kafka。使用者重新启动时,Kafka将从上一个偏移量开始传递消息。
在Kafka中,消息基本上是键值对。消息的有效负载就是值。另一方面,密钥通常用于分区目的,并且必须包含特定于业务的密钥,以便将相关消息放置在同一分区上。
在ActiveMQ中,消息由元数据(标头和属性)和主体(有效负载)组成。