Kafka生产者配置有哪些关键项
小樊
35
2025-12-25 10:34:25
Kafka生产者关键配置项
一 必填参数
- bootstrap.servers:Kafka 集群的 broker 地址列表,格式为 host1:port1,host2:port2;客户端会从中发现其他 broker。
- key.serializer / value.serializer:消息 key/value 的序列化器,如 StringSerializer、ByteArraySerializer 等。
以上两项是创建生产者实例的最低必备配置。
二 可靠性与重试
- acks:确认机制,常用值为 “0”(不等待)、“1”(仅 leader 确认)、“all”/“-1”(等待 ISR 全部副本确认);可靠性与延迟正相关。
- retries:发送失败的重试次数;建议在网络抖动等可恢复异常场景开启,常见设置为 3。
- retry.backoff.ms:两次重试之间的退避间隔,避免无效高频重试,常见设置为 1000 ms。
- enable.idempotence:是否开启幂等生产者,用于避免重复消息;开启后通常建议保持默认重试策略。
- max.in.flight.requests.per.connection:每个连接上未确认请求的最大数量;设为 1 可在开启幂等时严格保证顺序,但会牺牲吞吐。
- request.timeout.ms:等待请求响应的超时时间,超时将触发重试或抛异常,需结合网络与集群负载合理设置。
三 吞吐与批量
- batch.size:批处理上限,默认 16384 B(16 KB);增大可提升吞吐,但会增加内存占用与延迟。
- linger.ms:发送前等待更多消息的时间,默认 0 ms;适度增大可与批量配合提升吞吐。
- compression.type:压缩算法,常用 none / gzip / snappy / lz4 / zstd;压缩可减少网络流量,通常以少量 CPU换更高吞吐。
- buffer.memory:用于缓存待发送消息的总内存,默认 33554432 B(32 MB);当生产速度高于发送速度时会阻塞或抛异常。
- max.request.size:单个请求允许的最大字节数,默认 1 MB;需与 Broker 端 message.max.bytes 等参数协调。
四 网络、元数据与连接
- send.buffer.bytes / receive.buffer.bytes:Socket 发送/接收缓冲区大小,默认分别为 128 KB / 32 KB;设为 -1 使用操作系统默认。
- connections.max.idle.ms:空闲连接超时关闭时间,默认 540000 ms(9 分钟);在网络异常或 NAT 场景下可适当缩短以减少卡顿。
- metadata.max.age.ms:元数据强制刷新间隔,默认 300000 ms(5 分钟);集群拓扑变化频繁时可适当缩短。
- max.block.ms:send() / partitionsFor() 等方法的最大阻塞时间,默认 60000 ms;在元数据未就绪或缓冲区满时生效。
- client.id:客户端标识,用于日志与指标追踪,默认空字符串。
五 高级功能与常用默认值
- partitioner.class:自定义分区器,实现 Partitioner 接口,控制消息到分区的路由策略。
- interceptor.classes:拦截器列表,用于在发送前后对消息进行加工或埋点。
- transactional.id / transaction.timeout.ms:启用事务生产时配置事务 ID与事务超时;用于跨分区/跨会话的原子性写入。
- 常用默认值速览:
- acks=1,retries=0(建议按场景开启重试),batch.size=16384 B,linger.ms=0 ms,buffer.memory=33554432 B,compression.type=none,max.request.size=1048576 B(1 MB),request.timeout.ms=30000 ms,metadata.max.age.ms=300000 ms,max.in.flight.requests.per.connection=5。