Kafka与微服务架构集成

1.0 事件驱动架构(EDA)设计

1.1 微服务通信模式

  • 同步调用:REST/gRPC(适用于强依赖场景)
  • 异步通信:Kafka事件(适用于解耦场景,如订单状态变更通知物流、库存服务)

1.2 事件设计规范

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
    "eventId": "uuid",
    "eventType": "order.paid",
    "timestamp": 1620000000000,
    "data": {
        "orderId": "123",
        "amount": 99.9
    },
    "metadata": {
        "traceId": "xxx",
        "version": "1.0"
    }
}

2.0 Spring Cloud集成最佳实践

2.1 Spring Kafka高级配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
spring:
  kafka:
    producer:
      transaction-id-prefix: tx- # 开启事务支持
      properties:
        linger.ms: 10
        compression.type: lz4
    consumer:
      enable-auto-commit: false # 手动提交偏移量
      isolation-level: read_committed # 只消费已提交事务的消息
    listener:
      ack-mode: MANUAL_IMMEDIATE # 手动确认

2.2 消费端并发优化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
@KafkaListener(
    topics = "order-topic",
    concurrency = "4", // 并发消费者数量(≤分区数)
    containerFactory = "batchFactory"
)
public void batchConsume(List<ConsumerRecord<String, String>> records, Acknowledgment ack) {
    // 批量处理消息
    records.forEach(record -> process(record.value()));
    ack.acknowledge(); // 手动确认
}

3.0 性能压测与调优案例

3.1 压测工具

  • 生产端:kafka-producer-perf-test.sh
  • 消费端:kafka-consumer-perf-test.sh

3.2 调优案例:从10万QPS到50万QPS

  • 优化点1:消息压缩(snappy→lz4,CPU占用降低30%)
  • 优化点2:分区数从8调整为32(匹配 broker 数量)
  • 优化点3:消费者批量拉取(fetch.min.bytes=1MB,减少请求次数)

4.0 常见问题解决方案

4.1 消息堆积处理

  • 临时扩容消费者实例(需≤分区数)
  • 开启死信队列(DLQ):无法处理的消息转发至topic-dlq

4.2 数据倾斜治理

  • 检测:通过监控发现某分区consumer-lag异常偏高
  • 解决:重新设计Key哈希策略(如加盐哈希)

小结

程序员必知必会。