1.特性:
2.kafka在springboot中application.yml
application.yml--基础配置
spring:
profiles:
active: @profiles.active@ # 根据打包时的maven profile动态指定
# Kafka公共配置(会被各环境继承和覆盖)
kafka:
# 监听器类型:batch表示批量监听
listener:
type: batch
# 并发消费者数量(可根据环境调整)
concurrency: 3
# 批量监听时,没有消息时的等待时间(ms)
idle-between-polls: 3000
# 生产者公共配置
producer:
# 批量发送大小(字节)
batch-size: 16384
# 缓冲区总大小(字节)
buffer-memory: 33554432
# 序列化器
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
# 压缩方式(none, gzip, snappy, lz4, zstd)
compression-type: snappy
# 消费者公共配置
consumer:
# 是否自动提交偏移量
enable-auto-commit: true
# 自动提交间隔(ms)
auto-commit-interval: 100
# 解序列化器
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
# 一次poll最大记录数
max-poll-records: 1000
# 心跳检测间隔(ms)
heartbeat-interval: 3000
# 会话超时时间(ms)
session-timeout: 10000
# 请求超时时间(ms)
request-timeout: 30000
# 业务相关配置
app:
kafka:
# 业务主题定义
topics:
sysuser-change-log: mq_topic_sysuser_change_log # 用户修改日志
application-dev.yml
# 开发环境配置
kafka:
# 开发环境Kafka地址(通常使用本地或开发服务器)
bootstrap-servers: localhost:9092,localhost:9093,localhost:9094
# 生产者配置
producer:
# 开发环境重试次数较少
retries: 0
# 开发环境确认模式:只需要leader确认
acks: 1
# 开发环境不压缩以节省CPU
compression-type: none
# 消费者配置
consumer:
# 开发环境消费者组(按开发人员区分)
group-id: record-consumer-group-dev
# 开发环境从头开始消费(便于调试)
auto-offset-reset: earliest
# 开发环境可以关闭自动提交,便于手动控制
enable-auto-commit: false
# 开发环境单次poll较小数据量
max-poll-records: 100
# 开发环境隔离级别(默认)
isolation-level: read_uncommitted
# 开发环境业务配置
app:
kafka:
# 开发环境主题命名空间(避免与测试/生产混用)
topics:
sysuser-change-log: dev_mq_topic_sysuser_change_log
# 开发环境特殊配置
dev-mode:
enabled: true
# 是否模拟消息发送(当Kafka不可用时)
mock-producer: false
# 是否记录消息日志
log-messages: true
application-prod.yml
# 生产环境配置
kafka:
# 生产环境Kafka集群(多节点保证高可用)
bootstrap-servers: ${KAFKA_CLUSTER_SERVERS:10.0.1.35:9092,10.0.1.36:9092,10.0.1.37:9092}
# 生产者配置(最高可靠性)
producer:
# 生产环境必须有重试机制
retries: ${KAFKA_PRODUCER_RETRIES:10}
# 生产环境要求所有副本确认
acks: all
# 生产环境使用高效压缩
compression-type: snappy
# 开启幂等性(Exactly-Once语义基础)
enable-idempotence: true
# 生产环境事务支持
transaction-id-prefix: ${spring.application.name}-tx-
# 生产环境更长的超时时间
request-timeout: 120000
# 生产环境增加批量等待时间(ms)
linger-ms: 20
# 最大请求大小
max-request-size: 1048576
# 消费者配置(最高可靠性)
consumer:
# 生产环境消费者组(按服务区分)
group-id: ${spring.application.name}-consumer-group
# 生产环境从最新消息开始(除非需要重播)
auto-offset-reset: latest
# 生产环境开启自动提交
enable-auto-commit: true
# 生产环境更大批量处理
max-poll-records: 2000
# 生产环境严格的事务隔离
isolation-level: read_committed
# 生产环境更长的心跳间隔
heartbeat-interval: 5000
# 生产环境更长的会话超时
session-timeout: 15000
# 最大拉取间隔
max-poll-interval: 450000
# 生产环境分区策略(粘性)
partition-assignment-strategy: org.apache.kafka.clients.consumer.CooperativeStickyAssignor
# 监听器配置
listener:
concurrency: ${KAFKA_LISTENER_CONCURRENCY:8} # 根据CPU核数调整
ack-mode: batch
# 生产环境手动提交(更可靠)
ack-count: 100
ack-time: 5000
# SSL/TLS配置(生产环境建议启用)
security:
protocol: SSL
ssl:
trust-store-location: classpath:kafka.client.truststore.jks
trust-store-password: ${KAFKA_SSL_TRUSTSTORE_PASSWORD}
key-store-location: classpath:kafka.client.keystore.jks
key-store-password: ${KAFKA_SSL_KEYSTORE_PASSWORD}
# 生产环境业务配置
app:
kafka:
topics:
sysuser-change-log: ${KAFKA_TOPIC_STAFF_CHANGE_LOG:mq_topic_sysuser_change_log}
# 生产环境监控告警
monitoring:
# 开启全链路追踪
trace-enabled: true
# 开启指标收集
metrics-enabled: true
# 开启健康检查
health-check-enabled: true
# 异常告警阈值
error-threshold-percent: 1.0
# 延迟告警阈值(ms)
latency-threshold-ms: 1000
application-test.yml
# 测试环境配置
kafka:
# 测试环境Kafka集群地址
bootstrap-servers: 10.0.1.35:9092,10.0.1.36:9092,10.0.1.37:9092
# 生产者配置
producer:
# 测试环境增加重试机制
retries: 3
# 测试环境需要leader和所有副本确认
acks: all
# 测试环境请求超时时间
request-timeout: 60000
# 启用幂等性(防止重复)
enable-idempotence: true
# 消费者配置
consumer:
# 测试环境消费者组
group-id: record-consumer-group-test
# 测试环境从最早未消费开始
auto-offset-reset: earliest
# 测试环境开启自动提交
enable-auto-commit: true
# 测试环境批量处理更多消息
max-poll-records: 1000
# 测试环境更严格的事务隔离
isolation-level: read_committed
# 最大拉取等待时间(ms)
max-poll-interval: 300000
# 监听器配置
listener:
concurrency: 5 # 测试环境增加并发
ack-mode: batch # 批量确认
# 测试环境业务配置
app:
kafka:
topics:
sysuser-change-log: test_mq_topic_sysuser_change_log
# 测试监控配置
monitoring:
# 是否开启消息追踪
trace-enabled: true
# 统计采样率(1.0=全部采样)
sampling-rate: 0.1
3.Kafka 实现解耦与削峰:
-
异步处理:用户注册后,发送邮件/短信的通知逻辑,可以通过发消息到 Kafka,由另一个服务异步处理,提升接口响应速度。
-
削峰填谷:秒杀场景下,把大量的下单请求先写入 Kafka,后端服务再以自己的最大处理能力从 Kafka 消费,避免数据库被冲垮。
-
实战任务:在你的项目里实现一个"用户注册成功发送欢迎邮件"的异步功能。