深啃项目第四篇-kafka

1.特性:
  • 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

  • 高吞吐量 :即使是非常普通的硬件Kafka也可以支持每秒数百万 的消息。

  • 支持通过Kafka服务器和消费机集群来分区消息。

  • 支持Hadoop并行数据加载

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 消费,避免数据库被冲垮。

  • 实战任务:在你的项目里实现一个"用户注册成功发送欢迎邮件"的异步功能。

相关推荐
此时不提桶,更待何时4 小时前
06-23-A-RabbitMQ生态集成详解
分布式·rabbitmq
m0_6464299710 小时前
RabbitMQ 核心知识总结(生产实战版)
分布式·rabbitmq
DBA_G12 小时前
GBase 8c分布式数据库客户端工具 gsql
数据库·分布式
chunyublog12 小时前
Spark 词频统计练习
大数据·分布式·spark
ClouGence13 小时前
开源数据库管理工具 CloudDM 4.4.0 发布,新增 Kafka、SAP HANA 数据源
数据库·kafka
acrel713 小时前
高速公路分布式光伏并网电能质量与安全保护方案应用
分布式·安全
RobinXYuan13 小时前
【Kafka 源码手记】01 从消息队列到 Event Streaming
kafka·源码阅读
IT小小猪15 小时前
# Hadoop 3.3.6 完全分布式集群部署知识库
hadoop·分布式·eclipse
此时不提桶,更待何时15 小时前
06-24-B-RabbitMQ面试与生产事故实战
分布式·面试·rabbitmq
来福猿16 小时前
分布式锁 Redis 实现源码分析:SETNX、过期时间与可重入设计
数据库·redis·分布式