当前位置: 首页 > java >正文

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

http://www.xdnf.cn/news/19856.html

相关文章:

  • 【CMake】message函数
  • Flutter + Web:深度解析双向通信的混合应用开发实践
  • 深入理解 jemalloc:从内存分配机制到技术选型
  • Docker--架构篇
  • C++CSP-J/S必背模板
  • 机器学习从入门到精通 - Transformer颠覆者:BERT与预训练模型实战解析
  • PLSQL导入excel数据的三种方法
  • PL-YOLOv8:基于YOLOv8的无人机实时电力线检测与植被风险预警框架,实现精准巡检与预警
  • 区块链版权存证的法律效力与司法实践
  • 52Hz——STM32单片机学习记录——FSMC
  • maven scope=provided || optional=true会打包到jar文件中吗?
  • 车辆安全供电系统开发原则和实践
  • VR节约用水模拟体验系统:沉浸式体验如何改变我们的用水习惯
  • Debezium报错处理系列之第130篇:OutOfMemoryError: Java heap space
  • Spring boot3.x整合mybatis-plus踩坑记录
  • Cesium 实战 - 自定义纹理材质 - 箭头流动线(图片纹理)
  • 企业资源计划(ERP)在制造业的定制化架构
  • 【QT随笔】巧用事件过滤器(installEventFilter 和 eventFilter 的组合)之 QComboBox 应用
  • 手把手教你开发第一个 Chrome 扩展程序:网页字数统计插件
  • 从竞态到原子:pread/pwrite 如何重塑高效文件 I/O?
  • 如何使文件夹内的软件或者文件不受windows 安全中心的监视
  • Java8特性
  • 【HarmonyOS 6】仿AI唤起屏幕边缘流光特效
  • leetcode-每日一题-人员站位的方案数-C语言
  • Spring 循环依赖问题
  • 《LINUX系统编程》笔记p8
  • 大模型RAG项目实战:RAG技术原理及核心架构
  • SpringBoot 事务管理避坑指南
  • 机器学习:从技术原理到实践应用的深度解析
  • 机器人抓取中的力学相关概念解释