Kafka分区副本与RocketMQ队列的区别

简介: 最近在学习 Kafka,发现其核心概念与 RocketMQ 还是存在一定的差别,下面我来说下 Kafka 分区 与 RocketMQ 队列之间的区别。

640.jpg最近在学习 Kafka,发现其核心概念与 RocketMQ 还是存在一定的差别,下面我来说下 Kafka 分区 与 RocketMQ 队列之间的区别。


RocketMQ 队列



RocketMQ 每个主题都会有若干个队列,分布于集群中各个 broker 上,分布规律如下:


640.png

队列会在 broker 中抽象成一个 consumer queue,在集群模式下,每个队列每个消费组只能存在一个消费者进行订阅消费,但是一个消费者可以消费多个队列,这也保证了在集群模式下消息不会被重复消费,如下图所示:


640.png


在RocketMQ开源版本中,在创建主题时,通过集群创建模式,指定主题在集群中的队列数量,比如集群中有 2 个 broker,我们创建主题时选择队列数量为 4,就会在每个 broker 中为该主题创建 4 个 队列,那么该主题在集群中就会有 4 * 2 个队列数量,这里有个不好的地方就是无法精确控制队列数量,但这个问题不大。


RocketMQ 是通过主从模式实现消息的冗余,在生产环境中,也会采取多 Master 多 Slave 模式搭建集群,主从之间的队列数据同步有同步复制和异步复制两种。


因此,RocketMQ 是依靠队列进行消费的,而队列数据通过主从同步实现消息的冗余。


Kafka分区与副本



Kafka 的分区概念是其核心概念之一,分区机制使得 Kafka 具备了水平扩展的能力,在其分区之上,Kafka 还可以设置分区的副本,大大提高了 Kafka 消息的可靠性。


在 Kafka 中,一个主题在集群中会拥有一个以上分区,每个分区在每个消费集群中只能有一个消费者进行订阅消费,,但是一个消费者可以消费多个队列,与 RocketMQ 队列一样:

640.png

我们可以通过调整主题的分区数量提高消息的吞吐量,还可以为分区设置副本因子,即该分区在集群中拥有多少个副本(replica),副本分为 leader replica 与 follower replica,它们之间通过 ISR(in-sync replica)与 leader replica 保持数据同步。


在创建主题topic-demo时,可以指定主题在集群中的分区数量,以及副本因子大小:

--partitions 4 --replication-factor 2


以上参数为该主题创建了 4 个分区,副本因子为 2,我现在有个集群,有 3 个 broker:

nodel brokerid=O 
node2 brokerid=l 
node3 brokerid=2


根据 Kafka 的默认分配:

node1: topic-demo-0、topic-demo-1
node2: topic-demo-1、topic-demo-2、topic-demo-3
node3: topic-demo-0、topic-demo-2、topic-demo-3


有没有发现,每个分区都分配了一个副本,而且分区的分布尽量均衡,分区副本尽量不在同一个节点上,如果我们设置副本因子为 3,原理一样。


不同于 RocketMQ 队列,Kafka 的分区可以在集群中精确设置多少个,然后随机均衡地分布在集群上,还可以自由定义副本的多少,而 RocketMQ 的 Master-Slave 模式看起来仅有一份副本,当然为了节省存储空间以及提高性能,一般副本因子设置 2 也就够了。


相对比 RocketMQ 的队列与主从同步机制,Kafka 的分区与副本机制显得更加灵活,而且也更加合理。


相关文章
|
3天前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
7天前
|
消息中间件 负载均衡 Kafka
【赵渝强老师】Kafka的主题与分区
Kafka 中的消息按主题分类,生产者发送消息到特定主题,消费者订阅主题消费。主题可分多个分区,每个分区仅属一个主题。消息追加到分区时,Broker 分配唯一偏移量地址,确保消息在分区内的顺序性。Kafka 保证分区有序而非主题有序。示例中,Topic A 有 3 个分区,分区可分布于不同 Broker 上,支持负载均衡和容错。视频讲解及图示详见原文。
|
16天前
|
消息中间件 监控 负载均衡
在Kafka中,如何进行主题的分区和复制?
在Kafka中,如何进行主题的分区和复制?
|
18天前
|
消息中间件 存储 监控
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的区别
【10月更文挑战第24天】ActiveMQ、RocketMQ、RabbitMQ 和 Kafka 都有各自的特点和优势,在不同的应用场景中发挥着重要作用。在选择消息队列时,需要根据具体的需求、性能要求、扩展性要求等因素进行综合考虑,选择最适合的消息队列技术。同时,随着技术的不断发展和演进,这些消息队列也在不断地更新和完善,以适应不断变化的应用需求。
63 1
|
27天前
|
消息中间件 监控 负载均衡
在Kafka中,如何进行主题的分区和复制?
在Kafka中,如何进行主题的分区和复制?
|
7天前
|
消息中间件 Kafka
【赵渝强老师】Kafka分区的副本机制
在Kafka中,每个主题可有多个分区,每个分区有多个副本。其中仅有一个副本为Leader,负责对外服务,其余为Follower。当Leader所在Broker宕机时,Follower可被选为新的Leader,实现高可用。文中附有示意图及视频讲解。
|
1月前
|
消息中间件 存储 监控
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大的消息代理,用于分布式应用程序间的通信。它通过队列临时存储消息,支持异步通信和解耦。经典队列适合高吞吐量和低延迟场景,而仲裁队列则提供高可用性和容错能力,适用于关键任务系统。选择哪种队列取决于性能、持久性和容错性的需求。
121 6
|
1月前
|
消息中间件 存储 监控
说说如何解决RocketMq消息积压?为什么Kafka性能比RocketMq高?它们区别是什么?
【10月更文挑战第8天】在分布式系统中,消息队列扮演着至关重要的角色,它不仅能够解耦系统组件,还能提供异步处理、流量削峰和消息持久化等功能。在众多的消息队列产品中,RocketMQ和Kafka无疑是其中的佼佼者。本文将围绕如何解决RocketMQ消息积压、为什么Kafka性能比RocketMQ高以及它们之间的区别进行深入探讨。
74 1
|
1月前
|
消息中间件 存储 运维
为什么说Kafka还不是完美的实时数据通道
【10月更文挑战第19天】Kafka 虽然作为数据通道被广泛应用,但在实时性、数据一致性、性能及管理方面存在局限。数据延迟受消息堆积和分区再平衡影响;数据一致性难以达到恰好一次;性能瓶颈在于网络和磁盘I/O;管理复杂性涉及集群配置与版本升级。
|
1月前
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
46 1