[消息中间件]kafka(partiton)和 rocketmq(queue)

275 阅读2分钟

总结

kafka topic partition, 在kafka中, topic主题中是partition

mq topic queue, 在mq中, topic主题中是queue(message queue, 这就是mq的由来)

partition 和 queue 的作用是一样的, 都是分区, 只不过在不同的消息中间件当中, 叫的名字不同而已.

在消息中间件中,Topic确实可以由多个Partition(或queue)构成

这一特性在Kafka和RocketMQ等消息队列系统中均有所体现。

比如某一个topic有10个partition或者10个queue,比如是p1,p2,p3....p10, 或者是queue1, queue2, queue3....queue10.

有可能p1,p2,p3在一个brock1上, p4,p5,p6在另一个brock2上, 这就是分布式,

每一个partition或者queue都有备份, 这就是高容错.

1/Kafka中的Topic与Partition

在Kafka中,一个Topic内部逻辑上由多个Partition组成。

这种设计使得Kafka能够[并行]地处理消息,提高了系统的吞吐量和性能。

一条msg只能写入到同一个topic中的一个partition中, 比如某个topic由100个partition构成,

那么生产者在往该topic中生产数据的时候, 该数据只能写入到其中的一个partition中, 其他的partition不会写入. 以随机,轮询等方式.

生产者可以将消息并行地写入不同的Partition,而消费者也可以并行地从不同的Partition中消费消息。Partition的数量决定了单个Broker能够承受(管理)的Topic个数,以及系统的并行处理能力。

2/RocketMQ中的Topic与Queue

在RocketMQ中,虽然术语上可能有所不同(例如使用“Queue”而不是“Partition”来称呼消息的存储单元),但概念上是相似的。

RocketMQ中的Topic同样可以由多个Queue(或可以理解为Partition)组成。

这些Queue是消息存储和传输的实际容器,提供了消息的扩展性和负载均衡能力。

通过增加Queue的数量,可以提高消息的存储和传输能力,支持更大规模的业务场景。

在RocketMQ中,每个Topic内的Queue都有唯一的QueueId进行标识。

生产者将消息发送到特定的Topic时,RocketMQ会根据一定的策略(如轮询、哈希等)将消息分发到不同的Queue中(只会写入其中一个queue,其他的queue中不会写)

消费者则从这些Queue中拉取消息进行消费。

总结

综上所述,无论是Kafka还是RocketMQ,它们的Topic都是由多个Partition(或Queue)构成的。

这种设计使得消息队列系统能够[并行]地处理消息,提高了系统的吞吐量和性能。

同时,通过增加Partition(或Queue)的数量,还可以实现消息的水平扩展和负载均衡。