1、语言与开发重点
1、Kafka:采用Scala语言开发,主要用于处理活跃的流式数据和大数据量的数据处理。
2、RabbitMQ:由Erlang语言开发,主要用在实时对可靠性要求比较高的消息传递上。
2、结构与交互方式:
1、Kafka:采用mq结构,broker有partition分区的概念。Consumer与Broker之间的交互是pull(拉取)模式,即Consumer主动从Broker拉取数据。
2、RabbitMQ:采用AMQP(高级消息队列协议),这是一个进程间传递异步消息的网络协议。RabbitMQ的broker由Exchange、Binding、Queue组成。Producer与Consumer之间的交互是push(推送)模式,即Broker将数据推送给Consumer。
3、特性与功能:
1、Kafka:具有高吞吐量、低延迟、可扩展性、持久性、可靠性、容错性和高并发等特点。特别地,Kafka通过分区、批量发送和压缩消息、顺序读写、零拷贝等技术实现高吞吐量。Kafka 0.8以后,通过副本机制实现高可用。
2、RabbitMQ:具有可靠性、灵活的路由、消息集群和高可用等特点。RabbitMQ使用一些机制如持久化、传输确认、发布确认等来保证消息的可靠性。它提供了灵活的路由功能,可以通过Exchange进行路由。RabbitMQ支持消息集群,多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。此外,RabbitMQ的队列可以在集群中的机器上进行镜像,以实现高可用。