Kafka与RocketMq比较

目录

前言

Kafka与RocketMQ的比较

一.架构设计

二.数据可靠性

三.性能对比

四.消息

投递实时性

五.消费失败重试

六.严格的消息顺序

七.定时消息

八.消息事务

九.故障恢复

十.使用场景


前言

MQ全称 Message Queue,也就是消息队列,是应用程序之间的通信方法。

MQ使用的业务场景:

  • 业务异步解耦
  • 解耦微服务
  • 流量削峰
  • 消息分发
  • 分布式事务的数据一致性

Kafka与RocketMQ的比较

一.架构设计

Kafka和RocketMQ都是基于发布/订阅模式的消息系统,但是在架构上有如下不同:

Kafka: 

  •  Kafka的架构相对简单,主要有Producer,Consumer和Kafka集群三个组件组成。
  • Producer将消息发布到Kafka集群中的Broker节点,然后Consumer从Broker节点中获取消息进行消费。
  • 此外Kafka的数据模型是基于Topic和Partition的,每个Topic可以在多个Partition,每个Partition可以在多个Broker节点上复制,保证数据的高可用性。

RocketMQ:

  • RocketMq架构相对复杂,主要有NameServer,Broker,Producer,Consumer四个角色组成。
  • NameServer主要负责服务注册和发现,Broker节点负责存储和传输消息,Producer负责将消费发送到Broker,Consumer从Broker节点中获取消息进行消费。
  • RocketMQ也是基于Topic和Partition的数据模型,但是它采用的是一种主从复制的机制,确保了数据的高可用性和容错性。

二.数据可靠性

  • RocketMQ支持异步实时刷盘,同步刷盘,同步Replication,异步Replication。
  • Kafka使用异步刷盘方式,异步Replication
  • RocketMQ的同步刷盘在单机可靠性上比Kafka更高,因为不会因为操作系统Crash,导致数据丢失。

Kafka和RocketMQ都是高可靠性的消息系统,但是他们在可靠性上还是有一定差异:

   在数据可靠性方面,Kafka表现更为出色,主要是因为Kafka在Broker的数据模型存储上采用了多副本机制,每个Partition都有多个副本,当某个Broker节点失效时,可以通过其他的副本来保证数据的可用性。而RocketMQ采用则是主从复制的特性,当主节点失效时,需要进行主节点选举才能保证保证数据的可用性,在这个进行选举的期间就会存在着一定的延迟,而延迟则就可能会导致消息的丢失。

三.性能对比

消息大小都以10个字节为例。

  • Kafka单机写入TPS约在百万条/m。
  • RocketMQ单机写入TPS单实例约7万条/m,单机部署3个Broker的情况下,可以高达12万/m。

Kafka和RocketMQ都是高吞吐,低延迟的消息系统,以下是他们之间的差异:

 在吞吐量方面,Kafka表现更加出色。Kafka的使用顺序写磁盘的方式存储消息,因为这一特性,可以达到非常高的吞吐量,而且在读取方面也能够达到非常高的性能。RocketMQ虽然也使用了顺序写磁盘的方式存储消息,但是其读取性能会不如Kafka,尤其是在批量处理的情况下。

在延迟方面,不得不提及RocketMQ的表现十分出色,RocketMQ通过采用 零 Copy技术和缓存池技术来降低延迟,而Kafka则是通过批量发送和异步处理的方式来提高吞吐量,但相应的会增加一定的延迟。 

四.消息

目录

前言

Kafka与RocketMQ的比较

一.架构设计

二.数据可靠性

三.性能对比

四.消息投递实时性

五.消费失败重试

 六.严格的消息顺序

 七.定时消息

八.消息事务

九.故障恢复

十.使用场景


投递实时性

  • Kafka使用短轮询方式,实时性取决于轮询间隔时间。
  • RocketMQ使用长轮询,同Push方式实时性一致,消息的投递延迟通常在2-5ms之内。

五.消费失败重试

  • Kafka消费失败不支持重试。
  • RocketMQ消费失败支持定时重试,每次重试间隔时间顺延。

在这里就要提出RocketMQ的强大重试机制,举例这样一个场景:

  A服务为下单服务,B服务为积分服务,A服务此时调用下单一系列功能完成后,为了进行流量的削峰处理,此时我们引入MQ的中间件,A服务生产消息,发送至MQ中,B服务去消费消息,进行积分服务一系列功能处理。  但是这个B服务尝试去从MQ去消费这个过程,由于网络或者B服务延迟问题,导致MQ的这条消息消费失败。

此时引用RocketMQ利用MQ的消费失败重试机制,就可以很好的处理这个问题,但是Kafka并不能。

 

 RocketMQ可在broker.conf文件中配置Consumer端的重试次数和重试时间间隔,如下:

messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

六.严格的消息顺序

  • Kafka支持消息顺序,但是一台Broker宕机后,就会发生消费错乱。
  • RocketMQ则是严格按照的顺序,即使一台Broker宕机后,消息会发送失败,但是不会错乱。

七.定时消息

  • Kafka并不支持定时消息。
  • RocketMQ支持定时消息。

八.消息事务

  • RocketMQ自身提供了一套完整的消费事务机制,能够确保消息在发送和接收过程中的一致性和可靠性,能够保证消息在发送和接收过程中的一致性和可靠性。
  • Kafka的事务官方并没有支持,需要自行去处理。

九.故障恢复

  • Kafka支持自动的故障转移和数据复制机制,能够快速的恢复节点的可用性,保证数据的连续性。
  • RocketMQ在低版本只能手动去干预,在高版本(4.5)以后,自动切换和手动切换都具备。

十.使用场景

  • Kafka更适用于对于海量数据的处理,在日志领域比较成熟。
  • RocketMQ则更适用于流量的削峰处理和更多复杂的业务场景。

如有描述理解错误,请大家指出交流!

最后的最后,觉得文章对你有用的小伙伴,留个关注和点赞吧,谢谢支持!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Kafka优点: 1. 高吞吐量:Kafka采用分布式消息存储和处理方式,支持高并发读写,能够处理大量数据。 2. 可靠性:Kafka采用分布式架构,保证数据的可靠性,即使某个节点宕机,数据也不会丢失。 3. 高扩展性:Kafka支持集群扩展,可以根据业务需求进行扩容,支持横向扩展和纵向扩展。 4. 社区活跃:Kafka拥有活跃的社区,提供了丰富的文档和教程,可以快速上手。 5. 多语言支持:Kafka支持多种编程语言,如Java、Python、C++等,方便不同语言的开发人员使用。 Kafka缺点: 1. 复杂性高:Kafka的配置和部署比较复杂,需要一定的技术积累和经验。 2. 实时性差:Kafka的消息传递有一定的延迟,不适合实时性要求较高的场景。 3. 消息顺序不保证:Kafka默认不保证消息的顺序,需要通过额外的配置来保证消息的顺序。 4. 不支持事务:Kafka目前不支持事务,对于需要保证事务性的场景需要通过额外的实现来保证。 RocketMQ优点: 1. 高吞吐量:RocketMQ采用分布式架构,支持高并发读写,能够处理大量数据。 2. 可靠性:RocketMQ支持消息持久化,即使某个节点宕机,数据也不会丢失。 3. 实时性好:RocketMQ的消息传递延迟较低,适合实时性要求较高的场景。 4. 支持事务:RocketMQ支持事务,能够满足需要保证事务性的场景。 5. 易于部署:RocketMQ的部署相对简单,提供了方便的部署工具和文档。 RocketMQ缺点: 1. 社区相对较小:相比KafkaRocketMQ的社区相对较小,相关文档和教程相对较少。 2. 单点故障:RocketMQ的单个节点故障可能会导致整个系统不可用,需要进行高可用配置来应对。 3. 不支持多语言:RocketMQ目前只支持Java语言,不支持其他编程语言。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

`不然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值