以下是 Kafka 的核心参数分类说明,涵盖 生产者、Broker、消费者、Topic 等模块的关键配置项,帮助您快速理解与调优。
1. 生产者参数(Producer)
| 参数名 | 默认值 | 说明 |
|---|
bootstrap.servers | - | Kafka 集群地址列表(逗号分隔),用于初始连接和元数据获取。 |
acks | 1 | 消息持久化确认级别:0(无确认)、1(Leader确认)、all(所有ISR副本确认)。 |
retries | 2147483647 | 发送失败时的最大重试次数。 |
batch.size | 16384 (16KB) | 单个批次(ProducerBatch)的最大字节数,增大可提升吞吐量。 |
linger.ms | 0 | 批次发送前的等待时间(毫秒),增大可减少请求次数,但增加延迟。 |
compression.type | none | 消息压缩算法:gzip、snappy、lz4、zstd。 |
max.in.flight.requests.per.connection | 5 | 单连接上未确认的请求数,幂等性场景需设为 1。 |
enable.idempotence | false | 是否启用幂等性(防止消息重复)。 |
transactional.id | null | 启用事务时需配置唯一ID,支持跨分区原子性写入。 |
2. Broker 参数
| 参数名 | 默认值 | 说明 |
|---|
log.dirs | /tmp/kafka-logs | 日志存储目录(建议配置多个物理磁盘路径以提升性能)。 |
num.partitions | 1 | Topic 默认分区数(可在创建 Topic 时覆盖)。 |
log.retention.hours | 168 (7天) | 日志保留时间(按删除策略)。 |
log.retention.bytes | -1 | Topic 级别日志保留的最大字节数(所有分区总和)。 |
min.insync.replicas | 1 | 最小 ISR 副本数,配合 acks=all 使用。 |
unclean.leader.election.enable | false | 是否允许非 ISR 副本成为 Leader(设为 false 防止数据丢失)。 |
default.replication.factor | 1 | Topic 默认副本数(生产环境建议 ≥3)。 |
num.network.threads | 3 | Broker 处理网络请求的线程数。 |
num.io.threads | 8 | Broker 处理磁盘 I/O 的线程数(建议配置为磁盘数 × 2)。 |
3. 消费者参数(Consumer)
| 参数名 | 默认值 | 说明 |
|---|
group.id | - | 消费者组 ID,相同组内的消费者共享分区分配。 |
auto.offset.reset | latest | 无偏移量时的初始消费策略:latest(从最新消息)、earliest(从最早消息)、none(无偏移量时报错)。 |
enable.auto.commit | true | 是否自动提交偏移量(建议设为 false,手动提交以精确控制)。 |
auto.commit.interval.ms | 5000 | 自动提交偏移量的间隔时间(仅 enable.auto.commit=true 时生效)。 |
max.poll.records | 500 | 单次 poll() 返回的最大消息数。 |
max.poll.interval.ms | 300000 (5分钟) | 两次 poll() 的最大间隔时间,超时触发再平衡。 |
fetch.min.bytes | 1 | 单次拉取的最小数据量(字节),Broker 等待足够数据后返回。 |
fetch.max.wait.ms | 500 | Broker 等待 fetch.min.bytes 数据的超时时间。 |
4. Topic 参数
| 参数名 | 默认值 | 说明 |
|---|
cleanup.policy | delete | 日志清理策略:delete(按时间/大小删除)、compact(按 Key 压缩保留最新值)。 |
retention.ms | null | Topic 级别日志保留时间(优先级高于全局 log.retention.hours)。 |
retention.bytes | null | Topic 级别日志保留的最大字节数。 |
min.cleanable.dirty.ratio | 0.5 | 触发压缩的脏数据比例阈值(仅 cleanup.policy=compact 时生效)。 |
delete.retention.ms | 86400000 (24小时) | 墓碑消息(Tombstone)保留时间(仅压缩策略生效)。 |
max.message.bytes | 1048588 (1MB) | Topic 允许的最大消息大小(需同步配置 Broker 的 message.max.bytes)。 |
5. 高级参数
| 参数名 | 默认值 | 说明 |
|---|
replica.lag.time.max.ms | 30000 (30秒) | Follower 副本最大同步延迟时间,超时则移出 ISR。 |
log.message.timestamp.type | CreateTime | 消息时间戳类型:CreateTime(生产者生成)、LogAppendTime(Broker 接收时间)。 |
offsets.topic.replication.factor | 3 | 内部 Topic __consumer_offsets 的副本数(生产环境建议 ≥3)。 |
sasl.mechanism | GSSAPI | SASL 认证机制(如 PLAIN、SCRAM-SHA-256)。 |
ssl.keystore.location | null | SSL 证书路径(启用 TLS 加密时配置)。 |
调优建议
- 高吞吐场景: • 生产者:增大
batch.size(如 1MB)和 linger.ms(如 50ms),启用 compression.type=lz4。 • Broker:配置多 log.dirs,优化 num.io.threads。
- 高可靠性场景: • 生产者:
acks=all 且 min.insync.replicas=2,启用幂等性和事务。 • Broker:unclean.leader.election.enable=false,default.replication.factor=3。
- 低延迟场景: • 生产者:
linger.ms=0,batch.size=16KB。 • 消费者:fetch.min.bytes=1,fetch.max.wait.ms=100。
总结
Kafka 参数配置需根据 业务场景(吞吐量、延迟、可靠性) 和 集群规模 灵活调整。核心原则:
- 生产者:平衡吞吐量与可靠性,优先批量发送与压缩。
- Broker:保障数据冗余与分区均衡,优化磁盘 I/O。
- 消费者:控制拉取频率与偏移量提交策略,避免重复消费。 建议通过监控工具(如 Prometheus、Kafka Manager)持续观察集群状态,逐步优化参数。