Kafka64 条

Topic 主题与配置

Topic 是消息的逻辑分类,由分区、副本数与一批可覆盖的配置(保留时间、清理策略、消息大小上限等)构成;创建后配置仍可动态调整。

Topic 主题是什么

Topic 是消息的逻辑分类,也是 Kafka 里所有配置的落点:分区数、副本因子、保留时长、清理策略、单条消息大小上限都以主题为单位定义。生产者写主题、消费者订主题,分区只是主题内部为并行而做的拆分。

配置分两级

主题级配置覆盖 Broker 级默认值。查配置时先看主题级覆盖(可能只有一两项),其余取集群默认。大多数配置可以在线修改并对新写入的消息立即生效,不需要重启 Broker,因此调整保留时长、大小上限属于常规运维动作。

基本信息

组成名称 + 分区数 + 副本因子 + 主题级配置覆盖
命名约定业务域.环境.实体,全小写,避免特殊字符与中文
常用配置retention.ms、cleanup.policy、max.message.bytes、min.insync.replicas
生效方式多数主题配置可在线修改,无需重启
管理工具kafka-topics.sh(结构)与 kafka-configs.sh(配置)

典型使用场景

  • 新建主题时定分区与副本,并显式覆盖保留策略而不是吃集群默认值
  • 日志类主题延长保留以支持下游重放补数
  • 账务类主题缩短保留以满足合规要求,同时保留足够重放窗口
  • 大消息场景上调 max.message.bytes,避免生产端被拒绝
  • 配置审计:用 --topics-with-overrides 找出被手工改过配置的主题

主题级配置查询与修改

主题级配置查询与修改
# 查看主题的覆盖配置(只列出被显式修改过的项)
kafka-configs.sh --bootstrap-server localhost:9092 \
  --entity-type topics --entity-name orders --describe

# 延长保留到 3 天
kafka-configs.sh --bootstrap-server localhost:9092 \
  --entity-type topics --entity-name orders \
  --alter --add-config retention.ms=259200000

# 删除覆盖配置,恢复为集群默认值(不是关闭该功能)
kafka-configs.sh --bootstrap-server localhost:9092 \
  --entity-type topics --entity-name orders \
  --alter --delete-config retention.ms

常用主题配置读法

配置作用取值建议
retention.ms消息保留时长按下游重放需求定,默认 7 天
retention.bytes单分区保留容量上限磁盘紧张时与时间保留取较小者生效
cleanup.policy清理策略:delete 或 compact事件流用 delete,状态类主题用 compact
max.message.bytes单条消息大小上限默认约 1MB,大消息需上调并核验生产端
min.insync.replicas写成功所需最少同步副本与 acks=all 配套,副本为 3 时设 2
命名建议用「业务域.环境.实体」的小写形式:全小写加点和连字符能兼容绝大多数监控与权限工具,中文或空格会在 ACL、脚本与可视化环节反复出问题。
内部主题(__consumer_offsets、__transaction_state)承载消费位点与事务状态,不要手工改它们的配置或清理数据,交由集群参数管理。

易错点

  • 主题名使用中文或特殊字符,限制监控、ACL 与工具兼容性,后期改名成本极高
  • 删除主题后立刻重建同名主题:旧数据被标记清理需要时间,期间可能与新数据混淆,重名前确认清理完成
  • 用 --delete-config 误以为是禁用某项功能,实际是恢复集群默认值,需先确认默认值符合预期
  • 把 cleanup.policy 设成 compact 用于事件流主题,旧记录被压缩合并,导致按位点重放时数据不完整

数据来源与参考

  • Apache Kafka 官方文档:Topic Configs 与 kafka-configs.sh
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌