Kafka Topic(主题)详解

在 Kafka 中,Topic(主题) 是消息的逻辑分类单位,相当于一个消息队列的名字。生产者(Producer)将消息写入某个 Topic,消费者(Consumer)则订阅并消费该 Topic 的消息。


1. Topic 的核心概念

  1. 消息分类容器

    • Kafka 不直接存储"队列",而是通过 Topic 来区分业务数据。

    • 举例:日志系统可能有 topic-accesslogtopic-errorlog

  2. 逻辑概念

    • 一个 Topic 在物理上由 若干个分区(Partition) 组成。

    • 分区中的消息是 有序存储 的,并且每条消息有一个唯一的 偏移量(Offset)

  3. 多订阅者模型

    • Kafka 允许多个消费者同时订阅同一个 Topic。

    • 可以广播消费(多个消费者组独立消费全量数据),也可以组内分摊(一个消费者组内的成员分摊分区)。


2. Topic 与 Partition(分区)

  1. 分区的作用

    • 提高 并发度:一个分区只能被同一个消费者组内的一个消费者消费,分区越多,消费者并发能力越强。

    • 提高 存储能力:分区可以分布在不同的 Broker 上,提升存储容量和吞吐。

  2. 分区内有序

    • 分区内的消息严格按照写入顺序存储和读取。

    • 跨分区则不保证全局顺序。

  3. 副本机制(Replication)

    • 每个分区都有 Leader 副本Follower 副本

    • 生产者和消费者都与 Leader 副本交互。

    • Follower 负责冗余备份,保证高可用。


3. Topic 的配置项

在创建 Topic 时,可以指定配置,比如:

  • 分区数(partitions)

    --partitions 3

    表示该 Topic 拥有 3 个分区。

  • 副本因子(replication-factor)

    --replication-factor 2

    表示每个分区有 2 份副本(1 个 Leader + 1 个 Follower)。

  • 保留策略

    • retention.ms:消息保留的时间,默认 7 天。

    • retention.bytes:按大小限制 Topic 中消息保留量。

    • cleanup.policy=delete:过期即删除(默认)。

    • cleanup.policy=compact:仅保留每个 Key 的最新消息(常用于 KV 场景)。


4. Topic 的命令操作

常见操作通过 kafka-topics.sh 完成。

  1. 创建 Topic

    bin/kafka-topics.sh --create \ --bootstrap-server localhost:9092 \ --topic my-topic \ --partitions 3 \ --replication-factor 2

  2. 查看 Topic 列表

    bin/kafka-topics.sh --list --bootstrap-server localhost:9092

  3. 查看 Topic 详情

    bin/kafka-topics.sh --describe \ --bootstrap-server localhost:9092 \ --topic my-topic

  4. 删除 Topic

    bin/kafka-topics.sh --delete \ --bootstrap-server localhost:9092 \ --topic my-topic


5. Topic 的使用场景

  1. 日志收集系统

    • 应用将日志写入 topic-logs,多个下游系统(存储、监控、实时计算)同时消费。
  2. 消息队列替代品

    • 下单系统写入 topic-orders,库存系统、通知系统等分别消费。
  3. 事件驱动架构(EDA)

    • 各类事件(用户登录、下单、支付)写入不同 Topic,供下游业务解耦处理。

6. Topic 的最佳实践

  • 分区数量要合理

    • 太少会导致吞吐不足,太多则增加管理成本和开销。
  • 副本因子建议 ≥2

    • 防止单点故障。
  • 避免过多小 Topic

    • Topic 数量过多会加重 Kafka 的元数据开销。
  • 根据业务选择保留策略

    • 日志类用 delete,KV 缓存类用 compact

👉 总结:

Kafka 的 Topic 是消息的逻辑分类单元,其本质是由分区和副本组成的分布式日志。它不仅保证消息存储的高吞吐与高可用,还通过消费者组机制支持不同的消费模式。

相关推荐
李白客1 小时前
分布式集群与数据库产业:从单机到集群的架构跃迁与市场重构
数据库·分布式·架构
传感器与混合集成电路1 小时前
储气库漏失检测技术解析:分布式光纤如何锁定环空窜漏的精确位置
分布式·数据分析·信号处理
cfm_29144 小时前
了解Sentinel
分布式·架构·sentinel
上海云盾-小余4 小时前
全域网络安全防护思路:借助分布式节点抵御异常访问实战
分布式·安全·web安全
中议视控8 小时前
展厅可视化网络中央控制系统:支持双向反馈,可视化播控,回显,状态显示,反向控制电脑,声光电网络视讯设备统一管理
网络·分布式·信息可视化
Java成神之路-21 小时前
集群架构 vs 分布式微服务架构:核心区别通俗拆解
分布式·微服务·架构
运维行者_1 天前
企业带宽监控工具实战:网络流量分析与异常排查的5个关键能力
运维·服务器·开发语言·网络·分布式·后端·php
jeffwang1 天前
我把同一个压测做错了三次,第四次才发现真正的瓶颈
分布式·性能优化·rust
Blossom i1 天前
分布式编程实验二:Flink安装与编程实践(头歌云客)
大数据·分布式·flink
ai_coder_ai1 天前
事件驱动架构(EDA)在分布式业务系统中的应用
分布式·架构