首先
kafka 和 rocketmq 是比较类似的。
都是主题消息,并且消费端订阅某个主题,多消费者(不同组)订阅可以多次消费,没有任何影响。
都使用了顺序写,零拷贝的技术提升性能。

不同点:
消息存储的结构不同,kafka 每个主题被分成了多个分区(partition),磁盘中按找每个分区来存储,消息存储到一个文件,索引存储到一个文件
而rocketmq,每个主题消息被投递到不同的queue中,而所有消息(整个brocker)存储到commitlog中,每个主题每个队列都会创建一个索引文件,指向commitlog文件。
零拷贝的实现不同,kafka使用sedfile的方式,rocketmq使用mmap的方式。
生产者投递消息的确认机制不同,kafka 是不等待响应,等待master响应,等待所有响应。
rocketmq是 同步,异步回调,不等待。
rocketmq 支持事务消息,延迟消息,标签过滤。
rocketmq 支持消费失败重试,kafka不支持。
rocketmq 支持按照时间回溯消息毫秒级,kafka支持按照offset回溯。

kafka 和 rabbitmq 处理逻辑不通
首先 kafka 是topic 模式,消息被持久化到磁盘,可以被多个消费者消费;而rabbitmq 通过交换机将消息路由到队列中,支持多种交换机,直连,头,主题,扇形。
kafka 扩展性更强,通过增加更多的节点;rabbitmq集群通常需要使用镜像队列或分片来处理消息。
kafka 默认是持久化道磁盘的,而rabbitmq 默认是易失的。
kafka 可以通过偏移量读取历史消息;rabbitmq没办法

rabbitmq 丢失消息, 例如交换机绑定多个队列,可能会出现一个队列投递成功,就返回给生产者客户端。此时在rabbitmq 中出现消息丢失。可以在投递消息时,设置mandatory=true ,要求全部投递成功,不过此时会出现消息重复。
rabbitmq 支持同步发送消息和异步发送消息。

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐