Spring Kafka核心参数说明

本文主要讲解Spring kafka常见的参数,以及介绍Spring kafka实践过程中的经验总结。

参数说明

spring.kafka.bootstrap-servers:Kafka broker 集群地址,用于建立初始连接。

spring.kafka.producer.retries:消息发送失败后的重试次数。

spring.kafka.producer.acks:消息发送确认机制:

  • acks=0: 不等待确认,适合日志类等可接受少量数据丢失的情况。

  • acks=1: 确认 leader 副本写入(kafka默认机制)。

  • acks=all/-1: 确认所有ISR副本写入,适合可靠性要求高的业务,缺点是会降低吞吐量。

spring.kafka.producer.batch-size:消息批量发送阈值大小,通常取值 16KB-128KB。

spring.kafka.producer.buffer-memory:生产者缓冲区总内存,高吞吐场景设置 64MB-128MB。

spring.kafka.producer.key-serializer:生产者消息键序列化方式:

  • JSON消息: org.springframework.kafka.support.serializer.JsonSerializer
  • 二进制数据: org.apache.kafka.common.serialization.ByteArraySerializer

spring.kafka.producer.value-serializer:生产者消息值序列化方式:

  • JSON消息: org.springframework.kafka.support.serializer.JsonSerializer
  • 二进制数据: org.apache.kafka.common.serialization.ByteArraySerializer

spring.kafka.producer.properties.linger.ms:批量发送等待时间:

高吞吐场景,设置100-500ms;低延迟场景,设置为0或5-20ms

spring.kafka.producer.delivery-timeout:消息发送最大超时时间。

spring.kafka.consumer.auto-offset-reset:无偏移量时的重置策略:

  • latest: 从最新消息开始,适合非新应用的实时处理。

  • earliest: 从最早消息开始,适合新应用上线场景。

spring.kafka.consumer.max-poll-records:消费者单次 poll 最大消息数:

轻量处理:设置 500-1000;重量处理:设置 10-100。

spring.kafka.consumer.enable-auto-commit:是否自动提交偏移量。

对可靠性要求高,设置为 false,否则设置为 true。

spring.kafka.consumer.group-id:消费者组id。

按业务功能命名,不同环境加后缀,如 mos-biz-prod。

spring.kafka.consumer.key-serializer:消费者消息键序列化方式

  • JSON消息: org.springframework.kafka.support.serializer.JsonSerializer
  • 二进制数据: org.apache.kafka.common.serialization.ByteArraySerializer

spring.kafka.consumer.value-serializer:消费者消息值序列化方式

  • JSON消息: org.springframework.kafka.support.serializer.JsonSerializer
  • 二进制数据: org.apache.kafka.common.serialization.ByteArraySerializer

spring.kafka.consumer.properties.max.poll.interval.ms:消费者两次poll最大间隔时间。

spring.kafka.consumer.heartbeat-interval:消费者发送心跳到协调器的时间间隔。

spring.kafka.consumer.session-timeout:消费者与broker会话超时时间,默认值10000ms。

spring.kafka.consumer.max-poll-interval:消费者两次poll最大间隔。

spring.kafka.consumer.listener.missing-topics-fatal:主题不存在时是否使应用启动失败。

建议非生产环境设置成 false,生产环境设置为 true。

spring.kafka.consumer.listener.ack-mode:手动提交时的确认模式

  • RECORD: 逐条提交

  • BATCH: 批处理提交(默认)

  • MANUAL: 手动调用 Acknowledgment.acknowledge()

  • MANUAL_IMMEDIATE: 立即提交

  • TIME: 定时提交

spring.kafka.consumer.listener.type:监听器类型。

single: 单消息处理(默认)、batch: 批量处理。

spring.kafka.consumer.listener.concurrency:并发消费者线程数

实践总结

1、batch-size 和 properties.linger.ms 参数设置说明。

高吞吐量,可接受一定延迟

  • 设置较大的batch-size(如512KB)和较大的linger.ms(如100-500ms)

  • 生产者会积累更多的消息,从而减少网络请求次数,提高吞吐量

  • 适用于日志收集、大数据处理等场景。

低延迟,可接受一定吞吐量损失

  • 设置较小的batch-size(如16KB)和较小的linger.ms(如0-20ms)

  • 消息会更快发送,但网络请求次数增加,吞吐量可能下降。

  • 适用于实时性要求高的场景,如实时监控等。

2、max-poll-records 和 properties.max.poll.interval.ms 参数设置说明。

max-poll-records 设置为一个合理的批量大小,避免一次拉取过多消息导致处理时间超过properties.max.poll.interval.ms 设置值,一旦超过将会触发消息重平衡机制。

3、session-timeout 和 heartbeat-interval 参数设置说明。

为什么 session-timeout > 3 × heartbeat-interval?被广泛采纳的最佳实践,源自 Kafka 官方推荐和实际运维经验。

4、spring.kafka.consumer.listener.concurrency 参数设置说明。

并发消费者线程数取值,建议不超过 Topic 分区数,多余线程即使设置,也只是在空转。

5、spring.kafka.consumer.listener.ack-mode 参数设置说明。

如果 ack-mode 设置为 manual_immediate,需要在监听器方法中注入 Acknowledgment 参数,并在处理完成后显示调用 acknowledge()方法。如果没有调用 acknowledge(),偏移量不会更新,消息会重复消费,长时间不提交,超过 properties.max.poll.interval.ms 值,会触发消息重平衡机制。

6、spring.kafka.producer.delivery-timeout 参数设置说明。

建议 delivery-timeout >= linger.ms + request.timeout.ms × (retries + 1)

示例计算:linger.ms = 100ms、request.timeout.ms = 30000ms (30秒)、retries = 3

最小 delivery-timeout = 100 + 30000 × (3+1) = 120100ms ≈ 120秒

7、注意生产者和消费者的键值序列化和反序列化方式必须匹配,否则会出现消费错误。

8、spring.kafka.consumer.max-poll-interval 和 properties.max.poll.interval.ms 参数说明。

两者效果是一样的,同时配置 max.poll.interval.ms 优先级更高

相关推荐
用户3610588626122 天前
深度拆解 Kafka 源码:Producer 构造器装配了哪些核心组件
kafka
知识搬运临时工3 天前
Kafka 发 1 GiB 数据,用户态 CPU 只花 0.016 秒,总耗时反而慢了 11%
后端·kafka
一条泥憨鱼4 天前
【消息队列】ACK确认了什么:消息队列可靠投递的完整链路
java·后端·kafka·消息队列·rabbitmq
斯普信专业组4 天前
Kafka 消费者 poll() 流程与原理详解
kafka·流程图
ly76894 天前
幂等消费者与重试副作用:Kafka 端点接入时的去重边界
分布式·kafka·linq·apache camel·幂等消费者·重试副作用·去重边界
9624565 天前
容器 RUNNING,为什么中间件仍不可用?ActiveMQ 与 Kafka/ZooKeeper 恢复实录
中间件·kafka·activemq
斯普信专业组5 天前
Kafka 3.9.1 三节点集群部署方案(ZooKeeper 模式)
分布式·zookeeper·kafka
皮皮林5516 天前
Kafka 怎么保证消费只消费一次的?
kafka
茶海棠6 天前
Hadoop+zookeeper+HBase+Kafka集群搭建全流程
hadoop·zookeeper·kafka·hbase