一、.rabbitmq
图片源自网络
生产者:confirm机制
exchange,queue,message:持久化
消费者:ack机制,推荐手动确认、幂等消费
二、kafka
生产者:ack机制 0 1 -1(all) ,isr集合(In-Sync Replicas),根据设置的副本落后leader副本的消息的时间间隔或者消息数量(0.9.0.0之后移除)两个维度,来动态调整isr集合中的数据。
broker:日志分区partition,副本数最少3个,写入最小副本数大于1.
图片源自网络
消费者:commit提交位移,推荐手动提交,幂等消费
三、二者区别
架构模型方面:
1.rabbitmq是amqp协议的实现,erlang语言开发,支持分布式,有broker,exchange,binding,queue等组成,rabbitmq以broker为中心,有消息确认机制。
2.kafka遵从一般的mq结构,有生产者,broker,消费者,以消费者为中心,无消息确认机制。
吞吐量方面:
1.kafka具有高的吞吐量,内部采用消息的批量处理,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的时间复杂度,消息处理的效率高,秒杀操作、日志同步;
2.rabbitmq支持对消息的事物,订单+库存操作,注册+短信操作,可靠传递,不支持批量操作;基于存储的可靠性要求可以采用磁盘和内存
可用性方面:
1.kafka broker支持主备
2.rabbitmq集群,镜像模式
负载均衡方面:
1.kafka采用zookeeper对集群中的broker和consumer进行管理,可以注册topic到zookeeper上,通过zookpeer的协调机制,实现语义指定分片。
2.rabbitmq需要额外的loadbanlancer进行。