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

相关推荐
txinyu的博客5 小时前
解析业务层的key冲突问题
开发语言·c++·分布式
qq_3181215912 小时前
Java大厂面试故事:Spring Boot、微服务与AI场景深度解析
java·spring boot·redis·微服务·ai·kafka·spring security
indexsunny15 小时前
互联网大厂Java面试实战:微服务、Spring Boot与Kafka在电商场景中的应用
java·spring boot·微服务·面试·kafka·电商
yumgpkpm15 小时前
Cloudera CDH、CDP、Hadoop大数据+决策模型及其案例
大数据·hive·hadoop·分布式·spark·kafka·cloudera
IT大白16 小时前
4、Kafka原理-Consumer
分布式·kafka
独自破碎E17 小时前
怎么在RabbitMQ中配置消息的TTL?
分布式·rabbitmq
七夜zippoe17 小时前
缓存策略:从本地到分布式架构设计与Python实战
分布式·python·缓存·lfu·lru
num_killer18 小时前
小白的Spark初识(RDD)
大数据·分布式·spark
小北方城市网18 小时前
微服务架构设计实战指南:从拆分到落地,构建高可用分布式系统
java·运维·数据库·分布式·python·微服务