Ubuntu上Kafka生产者优化指南
一 核心配置优先级
二 关键参数与建议值
| 参数 | 作用 | 建议值(按场景) | 备注 |
|---|---|---|---|
| acks | 确认机制 | 吞吐优先:1;低延迟:1;强可靠:all | 与幂等/重试/超时联动 |
| enable.idempotence | 幂等生产 | 强可靠:true;吞吐优先:false | 幂等开启时自动保证“至少一次”且避免重试乱序 |
| retries | 重试次数 | 默认极大(Int.MAX);可按抖动调大 | 与 delivery.timeout.ms 共同界定交付上限 |
| delivery.timeout.ms | 交付超时上限 | request.timeout.ms 的 2–4 倍 | 需 ≥ request.timeout.ms + linger.ms |
| max.in.flight.requests.per.connection | 单连接未确认请求上限 | 幂等:≤5;非幂等且允许重试:1(保序)或适度增大 | 过大+重试可能乱序 |
| linger.ms | 攒批等待时间 | 吞吐:20–50ms;低延迟:0–2ms | 与 batch.size 共同决定批大小 |
| batch.size | 批大小上限 | 吞吐:32–128KiB;低延迟:16–32KiB | 单分区批越大,压缩与吞吐越好 |
| compression.type | 压缩算法 | zstd/lz4/snappy | 批越大压缩收益越高 |
| buffer.memory | 发送缓冲池 | 视并发与突发流量调大 | 过小会在高并发下频繁阻塞 |
| max.request.size | 单请求大小 | 与 broker 侧 message.max.bytes 匹配 | 避免请求过大被拒 |
| request.timeout.ms | 请求超时 | 例如:15–60s | 结合网络与 broker 负载调整 |
| metadata.max.age.ms | 元数据刷新 | 适度降低(如 30000–60000ms) | 快速感知拓扑/分区变化 |
| receive.buffer.bytes / send.buffer.bytes | Socket 缓冲 | 适当增大(如 128KB–1MB) | 提升高带宽/高丢包网络下的稳定性 |
三 Ubuntu与JVM层面的优化
四 分区与并发设计
五 监控与压测闭环