网站首页 > 博客文章 正文
最近在学习 Kafka,发现其核心概念与 RocketMQ 还是存在一定的差别,下面我来说下 Kafka 分区 与 RocketMQ 队列之间的区别。
RocketMQ 队列
RocketMQ 每个主题都会有若干个队列,分布于集群中各个 broker 上,分布规律如下:
队列会在 broker 中抽象成一个 consumer queue,在集群模式下,每个队列每个消费组只能存在一个消费者进行订阅消费,但是一个消费者可以消费多个队列,这也保证了在集群模式下消息不会被重复消费,如下图所示:
在RocketMQ开源版本中,在创建主题时,通过集群创建模式,指定主题在集群中的队列数量,比如集群中有 2 个 broker,我们创建主题时选择队列数量为 4,就会在每个 broker 中为该主题创建 4 个 队列,那么该主题在集群中就会有 4 * 2 个队列数量,这里有个不好的地方就是无法精确控制队列数量,但这个问题不大。
RocketMQ 是通过主从模式实现消息的冗余,在生产环境中,也会采取多 Master 多 Slave 模式搭建集群,主从之间的队列数据同步有同步复制和异步复制两种。
因此,RocketMQ 是依靠队列进行消费的,而队列数据通过主从同步实现消息的冗余。
Kafka分区与副本
Kafka 的分区概念是其核心概念之一,分区机制使得 Kafka 具备了水平扩展的能力,在其分区之上,Kafka 还可以设置分区的副本,大大提高了 Kafka 消息的可靠性。
在 Kafka 中,一个主题在集群中会拥有一个以上分区,每个分区在每个消费集群中只能有一个消费者进行订阅消费,,但是一个消费者可以消费多个队列,与 RocketMQ 队列一样:
我们可以通过调整主题的分区数量提高消息的吞吐量,还可以为分区设置副本因子,即该分区在集群中拥有多少个副本(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 的分区与副本机制显得更加灵活,而且也更加合理。
猜你喜欢
- 2024-09-17 MQ 技术产品井喷,今天来详聊一下腾讯开源消息中间件 TubeMQ | 原力计划
- 2024-09-17 消息队列专栏(三)RocketMQ和Kafka
- 2024-09-17 全网最通俗易懂的Kafka入门(kafka 入门)
- 2024-09-17 Kafka、RabbitMQ、RocketMQ等中间件对比—消息发送性能和区别
- 2024-09-17 17个方面对比Kafka、RabbitMQ、RocketMQActiveMQ分布式消息队列
- 2024-09-17 Kafka与RocketMq文件存储机制对比
- 2024-09-17 理解Kafka和其他MQ对比(kafka与其他mq的区别)
- 2024-09-17 RocketMQ架构最全详解(图文全面总结)
- 2024-09-17 滴滴出行基于RocketMQ构建企业级消息队列服务的实践
- 2024-09-17 7张图,带你5分钟入门RocketMQ(rocketmq简介)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)