Kafka 运维与高并发实战:20个核心命令详解

一、Topic 管理命令(最核心)

1. 查看所有 Topic

命令:

bash 复制代码
kafka-topics.sh \
--bootstrap-server localhost:9092 \
--list

适用场景:

  • 查看 Topic 是否创建成功
  • 排查 Topic 丢失问题
  • 运维巡检
  • 快速确认集群中的 Topic 列表

注意事项:

  • 如果使用旧版本 Kafka(0.8.x),可能需要使用 --zookeeper 参数
  • 生产环境建议使用完整的 bootstrap-server 地址列表

2. 创建 Topic

Kafka 的并发能力主要由 Partition 决定,创建 Topic 时需要合理规划分区和副本。

命令:

bash 复制代码
kafka-topics.sh \
--bootstrap-server localhost:9092 \
--create \
--topic order-topic \
--partitions 3 \
--replication-factor 2

参数说明:

参数 作用 建议值
--partitions 分区数量 根据吞吐量需求设置,通常为 Broker 数量的倍数
--replication-factor 副本数 生产环境建议 2-3,确保高可用

高级配置示例:

bash 复制代码
kafka-topics.sh \
--bootstrap-server localhost:9092 \
--create \
--topic payment-topic \
--partitions 6 \
--replication-factor 3 \
--config retention.ms=604800000 \
--config segment.bytes=1073741824 \
--config cleanup.policy=delete

3. 查看 Topic 详情

这是排查 Kafka 问题最核心的命令之一。

命令:

bash 复制代码
kafka-topics.sh \
--bootstrap-server localhost:9092 \
--describe \
--topic order-topic

输出信息解读:

复制代码
Topic: order-topic	PartitionCount: 3	ReplicationFactor: 2	Configs: segment.bytes=1073741824
	Topic: order-topic	Partition: 0	Leader: 1	Replicas: 1,2	Isr: 1,2
	Topic: order-topic	Partition: 1	Leader: 2	Replicas: 2,3	Isr: 2,3
	Topic: order-topic	Partition: 2	Leader: 3	Replicas: 3,1	Isr: 3,1

关键信息:

  • Partition 数量:决定并发消费能力
  • ISR 副本(In-Sync Replicas):与 Leader 保持同步的副本集合
  • Leader:负责处理读写请求的分区主副本
  • Replica 分布:副本在 Broker 上的分布情况

4. 删除 Topic

命令:

bash 复制代码
kafka-topics.sh \
--bootstrap-server localhost:9092 \
--delete \
--topic order-topic

注意事项:

  • 生产环境一般禁止随意删除 Topic
  • 删除前需要确认:
    1. 是否有消费者还在消费该 Topic
    2. 数据是否已经备份或不再需要
    3. 相关业务是否已经下线

删除失败排查:

bash 复制代码
# 1. 检查 Topic 是否标记为删除
kafka-topics.sh --bootstrap-server localhost:9092 --list

# 2. 检查删除配置
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name order-topic --describe

# 3. 强制删除(谨慎使用)
# 需要设置 delete.topic.enable=true

5. 修改 Partition 数量

命令:

bash 复制代码
kafka-topics.sh \
--bootstrap-server localhost:9092 \
--alter \
--topic order-topic \
--partitions 6

重要限制:

  • Kafka 只允许增加 Partition,不允许减少
  • 原因:减少 Partition 会导致数据路由混乱,消息无法正确路由到新的分区

扩容最佳实践:

  1. 评估需求:根据业务增长预测分区需求
  2. 分批扩容:避免一次性增加过多分区影响性能
  3. 监控影响:扩容后监控集群负载和性能指标

二、Producer 相关命令

6. 启动生产者(控制台)

命令:

bash 复制代码
kafka-console-producer.sh \
--bootstrap-server localhost:9092 \
--topic order-topic

使用方式:

  1. 执行命令后进入交互模式
  2. 每行输入一条消息,按回车发送
  3. Ctrl+C 退出

示例:

复制代码
> 订单创建:2024-01-01 10:00:00
> 订单支付:2024-01-01 10:00:01
> 订单完成:2024-01-01 10:00:02

7. 发送 Key-Value 消息

命令:

bash 复制代码
kafka-console-producer.sh \
--bootstrap-server localhost:9092 \
--topic order-topic \
--property "parse.key=true" \
--property "key.separator=:"

发送示例:

复制代码
user1:{"orderId":"1001","amount":199.99,"status":"created"}
user2:{"orderId":"1002","amount":299.99,"status":"paid"}
user1:{"orderId":"1003","amount":399.99,"status":"shipped"}

原理说明:

  • 相同 Key 的消息会进入同一个 Partition
  • 这是 Kafka 保证局部有序的核心机制
  • Key 的哈希值决定分区:partition = hash(key) % numPartitions

三、Consumer 相关命令

8. 启动消费者(从头消费)

命令:

bash 复制代码
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic order-topic \
--from-beginning

参数说明:

参数 作用 默认值
--from-beginning 从最早消息开始消费 false(从最新消息开始)
--max-messages 最大消费消息数 无限制
--timeout-ms 超时时间(毫秒) 无限制

9. 消费者组消费

命令:

bash 复制代码
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic order-topic \
--group order-group

消费者组特性:

  1. 负载均衡:同一个消费者组内的消费者平均分配分区
  2. 故障转移:消费者故障时,分区会自动重新分配
  3. 偏移量管理:消费者组自动管理消费进度

10. 查看 Consumer Group 列表

命令:

bash 复制代码
kafka-consumer-groups.sh \
--bootstrap-server localhost:9092 \
--list

输出示例:

复制代码
order-consumer-group
payment-consumer-group
inventory-consumer-group
analytics-consumer-group

11. 查看消费积压(Lag)

命令:

bash 复制代码
kafka-consumer-groups.sh \
--bootstrap-server localhost:9092 \
--describe \
--group order-group

输出详解:

复制代码
GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG   CONSUMER-ID     HOST            CLIENT-ID
order-group     order-topic     0          1500            2000            500   consumer-1     /192.168.1.10   consumer-1
order-group     order-topic     1          1800            2000            200   consumer-2     /192.168.1.11   consumer-2
order-group     order-topic     2          1900            2000            100   consumer-1     /192.168.1.10   consumer-1

关键指标:

指标 含义 告警阈值
CURRENT-OFFSET 当前消费位点 -
LOG-END-OFFSET 最新消息位点 -
LAG 消息积压量 > 1000(根据业务设定)

Lag 监控策略:

  1. 实时监控:使用 Prometheus + Grafana 监控 Lag 趋势
  2. 分级告警
    • 警告:Lag > 1000
    • 严重:Lag > 10000
    • 紧急:Lag 持续增长

12. 重置 Offset

命令:

bash 复制代码
kafka-consumer-groups.sh \
--bootstrap-server localhost:9092 \
--group order-group \
--reset-offsets \
--to-earliest \
--execute \
--topic order-topic

重置选项:

选项 作用
--to-earliest 重置到最早偏移量
--to-latest 重置到最新偏移量
--to-datetime 重置到指定时间
--shift-by 向前/向后移动指定数量

典型场景:

  1. 数据修复:消费错误数据后重新消费
  2. 补偿消费:业务逻辑变更后重新处理
  3. Bug 回放:重现生产问题进行分析

四、消息查看命令

13. 查看 Topic 最新消息

命令:

bash 复制代码
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic order-topic \
--from-beginning \
--max-messages 10

高级查看选项:

bash 复制代码
# 查看最近10条消息
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic order-topic \
--max-messages 10

# 查看指定时间之后的消息
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic order-topic \
--from-beginning \
--property print.timestamp=true \
--property print.key=true \
--property print.value=true

14. 查看指定 Partition 消息

命令:

bash 复制代码
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic order-topic \
--partition 0 \
--offset 15

使用场景:

  1. 问题定位:查看特定分区的异常消息
  2. 数据抽样:检查分区数据分布
  3. 偏移量验证:确认消费进度

五、Broker 管理命令

15. 查看 Broker API 版本

命令:

bash 复制代码
kafka-broker-api-versions.sh \
--bootstrap-server localhost:9092

输出示例:

复制代码
localhost:9092 (id: 0 rack: null) -> (
	Produce(0): 0 to 9 [usable: 9],
	Fetch(1): 0 to 12 [usable: 12],
	ListOffsets(2): 0 to 6 [usable: 6],
	Metadata(3): 0 to 11 [usable: 11],
	...更多API...
)

升级检查:

  1. 兼容性检查:确保客户端版本与 Broker 兼容
  2. 功能验证:确认新版本 API 是否可用
  3. 回滚准备:记录当前 API 版本便于回滚

16. 查看 Kafka 配置

命令:

bash 复制代码
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--entity-type brokers \
--entity-name 0 \
--describe

可查看配置类型:

实体类型 查看命令
Broker 配置 --entity-type brokers --entity-name 0
Topic 配置 --entity-type topics --entity-name order-topic
Client 配置 --entity-type clients --client-id producer-1

动态配置管理:

bash 复制代码
# 动态修改配置
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--entity-type topics \
--entity-name order-topic \
--alter \
--add-config retention.ms=86400000

# 删除动态配置
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--entity-type topics \
--entity-name order-topic \
--alter \
--delete-config retention.ms

六、性能测试命令(高并发核心)

17. Producer 性能测试

这是 Kafka 压测最核心的命令,用于评估生产者的吞吐量和延迟。

基础命令:

bash 复制代码
kafka-producer-perf-test.sh \
--topic order-topic \
--num-records 1000000 \
--record-size 1024 \
--throughput 100000 \
--producer-props bootstrap.servers=localhost:9092

高级压测配置:

bash 复制代码
kafka-producer-perf-test.sh \
--topic perf-test \
--num-records 5000000 \
--record-size 1024 \
--throughput -1 \  # 不限流
--producer-props \
  bootstrap.servers=localhost:9092 \
  acks=all \
  compression.type=snappy \
  batch.size=16384 \
  linger.ms=5 \
  buffer.memory=33554432

核心指标解读:

指标 含义 优化方向
throughput 吞吐量(MB/秒) 调整 batch.size、linger.ms
latency 延迟(毫秒) 优化网络、调整 acks 级别
records/sec 每秒记录数 增加分区、优化序列化

18. Consumer 性能测试

命令:

bash 复制代码
kafka-consumer-perf-test.sh \
--bootstrap-server localhost:9092 \
--topic order-topic \
--messages 1000000

消费性能优化参数:

bash 复制代码
kafka-consumer-perf-test.sh \
--bootstrap-server localhost:9092 \
--topic order-topic \
--messages 1000000 \
--fetch-size 1048576 \
--threads 4 \
--group perf-consumer-group

七、集群排查命令

19. 查看 ISR 状态

ISR(In-Sync Replicas)表示与 Leader 保持同步的副本集合,是 Kafka 高可用的核心机制。

查看命令:

bash 复制代码
kafka-topics.sh \
--bootstrap-server localhost:9092 \
--describe

ISR 状态分析:

复制代码
Topic: order-topic	Partition: 0	Leader: 1	Replicas: 1,2,3	Isr: 1,2
Topic: order-topic	Partition: 1	Leader: 2	Replicas: 2,3,1	Isr: 2,3
Topic: order-topic	Partition: 2	Leader: 3	Replicas: 3,1,2	Isr: 3

ISR 异常排查:

  1. ISR 收缩:副本掉出 ISR 列表

    • 原因:网络延迟、磁盘 IO 慢、GC 停顿
    • 解决:检查网络、监控磁盘、优化 JVM
  2. ISR 频繁变化:副本频繁进出 ISR

    • 原因:网络抖动、Broker 负载不均
    • 解决:优化网络配置、负载均衡
  3. Leader 选举频繁:Partition 无 Leader

    • 原因:所有副本都不在 ISR 中
    • 解决:检查副本状态、重启异常 Broker

20. 集群健康检查(综合命令)

完整健康检查脚本:

bash 复制代码
#!/bin/bash

BOOTSTRAP_SERVER="localhost:9092"

echo "=== Kafka 集群健康检查 ==="
echo "检查时间: $(date)"
echo "Bootstrap Server: $BOOTSTRAP_SERVER"
echo ""

# 1. 检查 Broker 连接
echo "1. Broker 连接状态:"
kafka-broker-api-versions.sh --bootstrap-server $BOOTSTRAP_SERVER 2>/dev/null
if [ $? -eq 0 ]; then
    echo "✅ Broker 连接正常"
else
    echo "❌ Broker 连接失败"
    exit 1
fi

echo ""

# 2. 检查 Topic 列表
echo "2. Topic 列表:"
kafka-topics.sh --bootstrap-server $BOOTSTRAP_SERVER --list
echo ""

# 3. 检查 Consumer Group
echo "3. Consumer Group 列表:"
kafka-consumer-groups.sh --bootstrap-server $BOOTSTRAP_SERVER --list
echo ""

# 4. 检查 Lag 情况
echo "4. 消费积压检查:"
for group in $(kafka-consumer-groups.sh --bootstrap-server $BOOTSTRAP_SERVER --list); do
    echo "Group: $group"
    kafka-consumer-groups.sh --bootstrap-server $BOOTSTRAP_SERVER --group $group --describe | grep -E "TOPIC|LAG" | head -5
    echo ""
done

echo "=== 检查完成 ==="

八、最佳实践总结

1. 命令使用规范

  • 环境隔离:开发、测试、生产环境使用不同的配置
  • 权限控制:生产环境限制删除和修改命令
  • 操作审计:记录所有运维操作日志

2. 性能优化建议

  1. 分区规划:根据业务吞吐量合理设置分区数
  2. 副本策略:生产环境至少 2 个副本保证高可用
  3. 监控告警:实时监控 Lag、ISR、吞吐量等关键指标
相关推荐
Elastic 中国社区官方博客8 分钟前
在 Elasticsearch 中回填时间序列数据:通过批量 API 加载数月的历史指标数据
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
10mAh24 分钟前
【Linux】CPU 100% 怎么排查?——top、pidstat、jstack 到线程定位实战
linux·运维·服务器
!chen41 分钟前
客户环境 Nginx 配置流式报表与超时排查
运维·nginx
想要打 Acm 的小周同学呀1 小时前
Kafka消息队列出现挤压如何解决?
分布式·kafka
KIZIFLOW北泽五金2 小时前
液压系统压力损失怎么降?成因分析与减损实操方案
运维·自动化·新媒体运营·产品运营·流量运营·用户运营·内容运营
介拙2 小时前
Zabbix 7.0 从装到告警触发,我踩了这些坑
运维
爱吃提升2 小时前
VMware虚拟机迁移系统磁盘完整教程(VMware Workstation17)
linux·运维·服务器
诸葛李2 小时前
linux 配置
linux·运维·服务器
zhuhai_xigedian2 小时前
源网荷储一体化柜的经济效益优化功能实现机制
大数据·运维·人工智能·重构·能源
微三云 - 廖会灵 (私域系统开发)2 小时前
抖店 OPC(Operational Process Control)自动化运营系统:架构、痛点与服务商商业体系分析
运维·架构·自动化