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

相关推荐
BYSJMG1 小时前
计算机毕设选题推荐:基于Hadoop的交通事故数据可视化分析系统
大数据·vue.js·hadoop·分布式·后端·信息可视化·课程设计
野犬寒鸦1 小时前
从零起步学习并发编程 || 第三章:JMM(Java内存模型)详解及对比剖析
java·服务器·开发语言·分布式·后端·学习·spring
虫小宝2 小时前
查券返利机器人的异步任务调度:Java XXL-Job+Redis实现海量查券请求的分布式任务分发
java·redis·分布式
liux35284 小时前
MySQL -> Canal -> Kafka-> ES 完整数据同步流程详解
mysql·elasticsearch·kafka
yq1982043011564 小时前
构建高可用资源导航平台:基于Django+Scrapy的分布式架构实践
分布式·scrapy·django
Byte Beat4 小时前
使用docker单机部署kafka,以KRaft模式运行,不使用zookeeper,
docker·kafka·kraft
你这个代码我看不懂4 小时前
Kafka常见问题解答
分布式·kafka
Tony Bai4 小时前
Git 即数据库:Beads (bd) —— 专为 AI Agent 打造的分布式任务追踪引擎
数据库·人工智能·分布式·git
小邓睡不饱耶5 小时前
Spark Streaming实时微博热文分析系统:架构设计与深度实现
大数据·分布式·spark
北亚数据恢复5 小时前
分布式数据恢复—Ceph+TiDB数据恢复报告
分布式·ceph·数据恢复·tidb·服务器数据恢复·北亚数据恢复·存储数据恢复