我目前的项目最后使用的是RabbitMQ,这里依然是结合网上大神们的优秀博客,对kafka和rabbitmq进行简单的比对。最后附上参考博客。 1.架构模型 rabbitmq RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心; Kafka kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据 2.消息确认机制 rabbitmq 具有生产者confirm机制以及消费者的消息应答机制ack。 Kafka 不具有应答机制。 3.消息的顺序 rabbitmq 在一个队列里面,rabbitmq的消息是严格顺序的,按照先进先出。 kafka 在同一个partition中消息是有序的,但是生产者put到Kafka中数据会分布在不同的partition中,所有总体是无序的。 4.吞吐量 rabbitmq 根据测试,RabbitMQ在不使用ACK机制的,Msg大小为1K的情况下,QPS可达6W+。再双方ACK机制,Msg大小为1K的情况下,QPS瞬间降到了1W+。 Kafka Kafka具有巨大的吞吐量,数据的存储以及获取是本地磁盘的批量处理,可以达到百万/s。 5.可靠性 rabbitmq RabbitMQ使用了MirrorQueue的机制,也可以做到多个机器进行热备。 Kafka Kafka的broker支持主备模式。 7.持久化 rabbitmq 支持 kafka Kafka 是一个持久性消息存储。
对于他们的使用场景如下 rabbitmq
1.RabbitMQ的消息应当尽可能的小,并且只用来处理实时且要高可靠性的消息。
kafka
1.应当有一个非常好的运维监控系统,不单单要监控Kafka本身,还要监控Zookeeper。(kafka强烈的依赖于zookeeper,如果zookeeper挂掉了,那么Kafka也不行了) |
|