kafka主题管理详解 - kafka-topics.sh

目录

      • 基本语法
      • 常用命令选项
        • [1. 创建主题(create)](#1. 创建主题(create))
          • [注意: 复制因子不能大于可用的 broker 数量](#注意: 复制因子不能大于可用的 broker 数量)
        • [2. 查看所有主题(list)](#2. 查看所有主题(list))
        • [3. 查看主题详情(describe)](#3. 查看主题详情(describe))
        • [4. 修改主题配置(alter)](#4. 修改主题配置(alter))
        • [5. 删除主题(delete)](#5. 删除主题(delete))
        • [6. 其他有用选项](#6. 其他有用选项)
      • 常见配置参数

在 Kafka 的 KRaft 模式(无 ZooKeeper)中, kafka-topics.sh 工具用于管理主题(topics),包括创建、查看、修改和删除等操作。以下是其详细使用方法:

基本语法

bash 复制代码
kafka-topics.sh --bootstrap-server <kafka-broker-host:port> [命令选项]

注意:在 KRaft 模式下,不再使用 --zookeeper 参数,而是通过 --bootstrap-server 连接到 Kafka broker。

常用命令选项

1. 创建主题(create)
bash 复制代码
kafka-topics.sh --bootstrap-server localhost:9092 \
  --create \
  --topic <topic-name> \
  --partitions <num-partitions> \
  --replication-factor <replication-factor> \
  [--config <key=value>]  # 可选的主题配置

示例:

bash 复制代码
# 创建一个名为 "user-tracking" 的主题,3个分区,1个副本
kafka-topics.sh --bootstrap-server localhost:9092 \
  --create \
  --topic user-tracking \
  --partitions 3 \
  --replication-factor 1 \
  --config retention.ms=86400000  # 数据保留1天
注意: 复制因子不能大于可用的 broker 数量

在 Kafka 中,复制因子不能大于可用的 broker 数量,因为每个副本需要存储在不同的 broker 上以保证高可用性。

否则会报错:

Error while executing topic command : Unable to replicate the partition 2 time(s): The target replication factor of 2 cannot be reached because only 1 broker(s) are registered.

2. 查看所有主题(list)
bash 复制代码
kafka-topics.sh --bootstrap-server localhost:9092 --list

执行演示:

3. 查看主题详情(describe)
bash 复制代码
kafka-topics.sh --bootstrap-server localhost:9092 \
  --describe \
  --topic <topic-name>  # 不指定则查看所有主题详情

示例:

4. 修改主题配置(alter)
bash 复制代码
kafka-topics.sh --bootstrap-server localhost:9092 \
  --alter \
  --topic <topic-name> \
  [--partitions <new-num-partitions>]  # 只能增加分区数
  [--config <key=value>]  # 添加或修改配置
  [--delete-config <key>]  # 删除配置
增加分区数

示例:

bash 复制代码
# 增加分区数到5
kafka-topics.sh --bootstrap-server localhost:9092 \
  --alter \
  --topic user-tracking \
  --partitions 5

演示:

5. 删除主题(delete)
bash 复制代码
kafka-topics.sh --bootstrap-server localhost:9092 \
  --delete \
  --topic <topic-name>

注意:删除主题需要 broker 配置 delete.topic.enable=true(默认已开启)。

删除操作是异步的,执行完这条命令不代表主题立即就被删除了。它仅仅是被标记成"已删除"状态而已。Kafka 会在后台默默地开启主题删除操作。

演示:

6. 其他有用选项
  • --if-exists:操作仅在主题存在时执行(如删除、修改)
  • --if-not-exists:操作仅在主题不存在时执行(如创建)

示例:

bash 复制代码
# 仅在主题存在时删除
kafka-topics.sh --bootstrap-server localhost:9092 \
  --delete \
  --topic user-tracking \
  --if-exists

常见配置参数

可以通过 --config 选项设置的常用主题配置:

  • retention.ms:数据保留时间(毫秒)
  • retention.bytes:每个分区保留的数据量上限
  • cleanup.policy:清理策略(deletecompact
  • max.message.bytes:单条消息的最大字节数
相关推荐
jeffwang4 小时前
我把同一个压测做错了三次,第四次才发现真正的瓶颈
分布式·性能优化·rust
ai_coder_ai4 小时前
事件驱动架构(EDA)在分布式业务系统中的应用
分布式·架构
蓝胖的四次元口袋6 小时前
分布式知识梳理(4)
分布式
书香门第6 小时前
系统设计练习 - 分布式黑名单服务(design a distributed denylist service)
分布式·系统架构·系统设计
江畔柳前堤14 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
霸道流氓气质18 小时前
RabbitMQ 延迟队列与死信队列:原理、实现与实战
分布式·rabbitmq·ruby
爱吃面的猫19 小时前
大数据Kafka3.x之——Kafka3.3.0安装与使用(详细)
大数据·分布式·zookeeper
小张同学a.1 天前
zabbix企业级监控平台4——分布式监控与grafana数据可视化
linux·运维·数据库·分布式·信息可视化·zabbix·grafana
番茄炒鸡蛋加糖1 天前
分布式 CAP、BASE 理论 & 中间件 CAP 取舍
分布式·中间件
海上小飞龙2 天前
Redis 分布式锁原理:从 SET NX EX 到 Redisson 看门狗
数据库·redis·分布式