重要的生产者参数

重要的生产者参数

直入主题

1. acks

  • acks = "1"。同时也是默认值。生产者发送消息之后,只要分区 leader 副本成功写入消息,就会收到来自服务端的成功响应;如果消息无法写入 leader 副本,会进行重试(如果设置了重试次数和间隔),不重试则会丢失消息;如果消息成功写入 leader 副本,也收到成功响应,但是在 followerleader 拉取副本之前 leader 副本崩溃,那么数据丢失。设置为 此值,是吞吐量和消息可靠性之间的折中方案。
  • acks = "0"。吞吐量最高的方案。在生产者发送消息之后,不需要等待服务端的任何响应。如果消息在被发送之后发生了意外,导致 Kafka 未收到此消息,那么数据丢失;写入之后的情况和 acks = 1 时相同。

2. max.request.size

此参数用来限制生产者能发送的消息的最大值,默认为 1048576B,即 1 MB。通常这个值不需要配置,如果非要配置,还请联合 broker 端和 consumer 端的一些配置进行联合配置,以免产生意外。

3. retries 和 retry.backoff.ms

  • retries 默认值为0,即生产者在发送发生异常(leader 重选,网络抖动等)时不进行重试。具体值为具体的重试次数
  • retry.backoff.ms 默认为 100。两次重试之间的时间间隔,避免无效的频繁的重试。可以在写代码时预估一个处理异常的时间,避免让 Producer 过早的重试完放弃发送。

4. compression.type

消息的压缩方式,默认为 "none"。其他选项:”gzip”、”snappy”、”lz4”。消息压缩是一种时间换空间的优化,有一定的时延。

5. connections.max.idle.ms

此参数用来指定 多久之后关闭限制的连接。默认值是 540000 ms,即 9 分钟。

6. linger.ms

此参数用来指定生产者发送 RecordBatch 之前 等待更多消息 ProducerRecord 加入的时间,默认值是 0。Producer 会在 RecordBatch 填满或者超过 linger.ms 时,发送 RecordBatch。时延换性能的提升方案。

7. receive.buffer.bytes

此参数用来设置 Socket 接受消息缓冲区(SO_RECBUF)的大小,默认值 32768 B,即 32 KB。如果为 -1 ,则为操作系统的默认值。如果ProducerKafka在不同的机房,可以适当调大此参数值。

8. send.buffer.bytes

此参数用来设置 Socket 发送消息缓冲区(SO_SNDBUF)的大小,默认值 131072 B,即 128KB。如果为 -1,则为操作系统默认值。

9. request.timeout.ms

此参数用来配置 Producer 等待请求响应的最长时间,默认值为 30000 ms,即 5 分钟。请求超时之后可以选择重试。此参数最好比 broker 端参数 replica.lag.time.max.ms 的值要大,减小 Producer 重试引起的消息重复的概率。