Spring Kafka 参数
Spring Kafka 生产者参数
acks
用于指定生产者在接收到服务器的确认信号之前,所要求的确认级别。常见值包括 0
(不确认),1
(只确认领导者已收到),和 all
(所有副本已收到)。
spring.kafka.producer.acks=all
推荐值: all
(以确保高可靠性)
retries
指定生产者发送失败时的重试次数。这有助于提升消息发送的可靠性。
spring.kafka.producer.retries=3
推荐值: 3 或更多,视应用容错需求而定。
batch.size
指定生产者批量发送消息的大小(以字节为单位)。增大这个值可以提高吞吐量,但会增加延迟。
spring.kafka.producer.batch-size=16384
推荐值: 16384(16KB),可根据实际需求调整。
linger.ms
设定生产者在发送消息前等待的时间。通过增加等待时间可以聚集更多消息,从而提高吞吐量。
spring.kafka.producer.linger-ms=1
推荐值: 1(减少延迟),可以根据需求调整至更高的值以增加吞吐量。
Spring Kafka 消费者参数
auto.offset.reset
用于指定消费者在没有找到初始偏移量或当前偏移量在服务器中不存在时应该如何处理。可选值包括 earliest
(从最早的可用数据开始读取)和 latest
(从最新的数据开始读取)。
spring.kafka.consumer.auto-offset-reset=earliest
推荐值: earliest
(确保不会错过任何消息)
enable.auto.commit
控制是否自动提交偏移量。如果设置为 true
,消费者会定期自动提交它们的偏移量。如果你希望手动管理偏移量提交,则应将其设置为 false
。
spring.kafka.consumer.enable-auto-commit=false
推荐值: false
(便于手动精确控制提交)
auto.commit.interval.ms
消费者自动提交的时间间隔由参数 auto.commit.interval.ms
来控制。该参数指定了消费者自动提交偏移量的时间间隔(以毫秒为单位)。当 enable.auto.commit
设置为 true
时,这个参数会生效。
假设我们将自动提交时间间隔设置为 5000 毫秒(即 5 秒),可以在配置文件中这样设置:
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=5000
推荐的值取决于你的应用场景和需求:
- 低延迟应用: 如果你希望低延迟且可以容忍较多的重复处理,可以设置较短的时间间隔,如 1000 毫秒(1 秒)。
- 高吞吐量应用: 如果你希望减少提交操作带来的开销,可以设置较长的时间间隔,如 5000 毫秒(5 秒)或更长。
max.poll.records
指定每次调用 poll()
方法时返回的最大记录数。这有助于控制消费者在每次轮询时处理的消息量,以避免单次处理过多消息导致延迟。
spring.kafka.consumer.max-poll-records=500
推荐值: 500(根据吞吐量需求调整)
max.poll.interval.ms
消费者两次 poll
调用之间的最大时间间隔由 max.poll.interval.ms
参数来控制。这个参数的作用是确保消费者在规定的时间间隔内调用 poll()
方法。如果超过了这个时间间隔而没有调用 poll()
,Kafka 会认为该消费者已经失效,并且会将该分区重新分配给组内的其他消费者。
spring.kafka.consumer.max-poll-interval=300000
推荐的值取决于你的应用场景和需求:
- 低延迟应用: 如果你希望系统能够快速检测到消费者失效,可以设置较短的时间间隔,如 30000 毫秒(30 秒)。
- 高吞吐量应用: 如果你的处理逻辑较复杂,需要较长时间来处理每批消息,可以设置较长的时间间隔,如 300000 毫秒(5 分钟)或更长。
session.timeout.ms
指定消费者与 Kafka 服务器之间的会话超时时间。如果消费者在这个时间内没有发送心跳,Kafka 会认为该消费者已经失效并进行重平衡。
spring.kafka.consumer.session.timeout.ms=10000
推荐值: 10000 毫秒(10 秒),可以根据实际情况调整。
request.timeout.ms
消费者请求超时时间由 request.timeout.ms
参数来控制。这个参数指定了消费者向 Kafka 服务器发送请求后,等待响应的最大时间。如果在这个时间内没有收到响应,消费者会认为请求失败,并进行相应的错误处理(如重试)。
spring.kafka.consumer.request.timeout.ms=30000
推荐的值取决于你的应用场景和需求:
- 低延迟应用: 如果你希望快速检测到请求超时,可以设置较短的时间间隔,如 10000 毫秒(10 秒)。
- 高可靠性应用: 如果你的网络状况较好,且希望尽可能等待响应,可以设置较长的时间间隔,如 60000 毫秒(60 秒)。