Kafka Topic 创建时怎么指定分区数和副本数?

文章导读
在 Kafka 中创建主题时,必须通过命令行工具明确传入分区数量和副本因子参数,否则可能沿用默认配置或触发自动创建机制,导致生产环境性能隐患。
📋 目录
  1. 基础创建命令
  2. 生产环境安全连接配置
  3. 分区数规划最佳实践
  4. 怎么验证是否生效
  5. 常见错误与排查
  6. 参考来源
A A

在 Kafka 中创建主题时,必须通过命令行工具明确传入分区数量和副本因子参数,否则可能沿用默认配置或触发自动创建机制,导致生产环境性能隐患。

先说结论:手动创建主题时建议使用 kafka-topics.sh 脚本,显式指定 `--partitions` 和 `--replication-factor` 参数以匹配集群规模。

  • 适合:生产环境规划、需要控制数据冗余和并行度的场景
  • 先准备:确认 Broker 节点数量,确保副本数不超过节点总数
  • 验收:创建后使用 describe 命令检查分区分配和副本同步状态

基础创建命令

根据 Kafka 版本不同,连接参数有所区别。较新版本推荐使用 bootstrap-server 参数,旧版本或特定配置下可能仍需指定 zookeeper(已逐步废弃)。

较新版本推荐命令:

Kafka Topic 创建时怎么指定分区数和副本数?
bin/kafka-topics.sh `--create` `--bootstrap-server` localhost:9092 `--replication-factor` 1 `--partitions` 1 `--topic` test

旧版本命令:

bin/kafka-topics.sh `--zookeeper` localhost:2181 `--create` `--topic` topicone `--partitions` 2 `--replication-factor` 1

生产环境安全连接配置

生产环境通常开启 SASL/SSL 鉴权,直接连接会报错 Authentication failed。需要创建配置文件并通过 `--command-config` 指定。

Kafka Topic 创建时怎么指定分区数和副本数?

1. 创建 client.properties 配置文件:

security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="secret";
ssl.truststore.location=/var/private/ssl/client.truststore.jks
ssl.truststore.password=test1234

2. 带鉴权的创建命令:

bin/kafka-topics.sh `--create` `--bootstrap-server` kafka-prod:9093 `--command-config` client.properties `--replication-factor` 3 `--partitions` 10 `--topic` order-topic

分区数规划最佳实践

分区数并非越多越好,需结合吞吐量和消费者并行度规划:

Kafka Topic 创建时怎么指定分区数和副本数?
  • 消费者并行度:分区数应大于等于消费者组内的最大消费者实例数,否则部分消费者会空闲。
  • 吞吐量估算:单分区吞吐量建议控制在 10MB/s - 50MB/s 之间。若预期峰值吞吐为 500MB/s,建议至少规划 10-50 个分区。
  • Broker 负载:分区总数过多会增加 Broker 内存开销和 Leader 选举时间。单 Broker 分区数建议不超过 4000 个。

怎么验证是否生效

使用 describe 命令查看主题的分区与备份详细情况:

bin/kafka-topics.sh `--bootstrap-server` localhost:9092 `--describe` `--topic` test-topic

重点关注以下字段:

  • PartitionCount:表示总共有多少个分区
  • ReplicationFactor:表示每个分区有多少个副本备份
  • ISR:In-Sync Replicas,代表与 Leader 保持同步的副本集合。若 ISR 数量小于副本数,说明存在同步延迟或 Broker 故障。
  • Under Replicated Partitions:若该指标大于 0,说明集群存在副本不同步风险。

常见错误与排查

  • InvalidReplicationFactorException:报错提示副本数大于 Broker 数量。排查:使用 kafka-broker-api-versions.sh 或查看监控确认存活 Broker 数,确保 replication-factor <= 存活 Broker 数。
  • TopicAlreadyExistsException:主题已存在。排查:若允许覆盖,需先删除旧主题;若不允许,检查命名规范。
  • 自动创建风险:默认配置 allow.auto.create.topics=true 下,发送消息到不存在的 topic 会自动创建分区数为 1 的 topic。建议在生产环境将该配置设置为 false,强制手动规划创建。
  • 分区不可减少:分区数创建后可动态增加,但不可减少。规划时需预留未来 1-2 年的增长空间。

参考来源

  • Apache Kafka Official Documentation - Topic Configuration
  • Apache Kafka Official Documentation - Security