3. Kafka 主题创建、分区与副本参数配置
吞吐与可靠性的参数组合
创建主题时,分区数决定并行度上限,副本因子决定数据冗余份数,min.insync.replicas 决定生产者 acks=all 时至少需要多少个副本确认写入。三者共同决定“能写多快”和“丢不丢数据”。
本案例以三节点集群(broker.id 1/2/3)为例,创建主题 orders,目标:分区数 6、副本因子 3、min.insync.replicas=2。含义是每个分区有 1 个 Leader + 2 个 Follower,写入需至少 2 个副本确认;可容忍 1 个副本失效仍能写入,若失效副本达到 2 个则写入被拒绝(NOT_ENOUGH_REPLICAS),从而避免在冗余不足时继续接受数据。
创建命令与参数设置
使用 kafka-topics.sh 创建主题,关键参数通过 --config 传入:
kafka-topics.sh --bootstrap-server localhost:9092 \
--create --topic orders \
--partitions 6 \
--replication-factor 3 \
--config min.insync.replicas=2 \
--config retention.ms=604800000
参数含义:--partitions 6 设置 6 个分区;--replication-factor 3 每个分区 3 份副本;min.insync.replicas=2 要求 ISR 至少 2 个副本;retention.ms=604800000 保留 7 天。
验证参数生效
创建后先确认主题描述:
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders
预期输出中每个分区显示 Replicas: 3,且 Configs: min.insync.replicas=2。随后用生产者写入并消费验证:
# 生产 100 条消息
seq 1 100 | kafka-console-producer.sh \
--bootstrap-server localhost:9092 \
--topic orders \
--producer-property acks=all
# 消费验证
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic orders \
--from-beginning \
--max-messages 100
若 100 条全部消费成功,说明在 3 副本、min.insync.replicas=2 条件下生产消费闭环正常。可进一步停掉一个 broker 再写入,验证 ISR=2 时仍可写入;停掉两个 broker 后写入应报 NOT_ENOUGH_REPLICAS。
分区数只能增加不能减少;副本因子创建后不可直接修改,需通过分区重分配工具调整。生产环境建议副本因子≥3,min.insync.replicas=副本因子-1。
若 min.insync.replicas 设置过高(如等于副本因子),任一副本失效都会导致写入不可用;设置过低(如 1)则 acks=all 退化为单副本确认,失去冗余保护意义。