消息队列主题
Topic 是什么?
消息的逻辑分类,同一类消息写进同一个 Topic
类比:一个电视频道,所有同类节目都在这个频道播
它是什么
Topic 只是逻辑上的名字,本身不存消息。真正存消息的是它下面的 Partition(Kafka)或 MessageQueue(RocketMQ)。
生产者和消费者都面向 Topic 编程:生产者往 order-topic 写,消费者从 order-topic 读,双方不需要知道对方是谁。
为什么要有它
它是解耦的关键。新增一个下游系统,只要订阅同一个 Topic,上游一行代码都不用改。
Topic 也是权限和配额的单位:可以限制某个应用只能写 order-topic,或者给不同 Topic 设不同的保留时长。
常见误区
Topic 越多越好吗?不是。Kafka 每个分区都对应磁盘文件和内存结构,Topic 数量暴涨会拖慢 Controller 和元数据同步;RocketMQ 的 Topic 过多同样会显著影响性能。
- 一个业务一条 Topic,不要一条消息一个 Topic
- 消息类型差异用 tag / header 区分,而不是新建 Topic
- Topic 的命名建议带业务域前缀,如 trade.order.created