Skip to content

第二章 核心概念与架构 v1.0 ​

第一部分 核心架构 ​

一、整体架构 ​

Kafka集群由多个Broker组成,每个Broker是一个Kafka服务器实例。

1.Broker ​

Kafka集群中的服务器节点称为Broker,负责接收和存储消息,处理消费者请求。

主要功能:

  • 消息存储:将消息持久化到磁盘
  • 消息转发:处理消费者的拉取请求
  • 副本管理:维护分区的副本同步

2.Zookeeper ​

Kafka使用Zookeeper管理集群元数据,包括Broker注册、Topic配置、分区Leader选举等。

主要功能:

  • Broker注册:记录Broker的存活状态
  • 配置管理:存储Topic、分区等配置信息
  • Leader选举:分区Leader故障时选举新Leader

二、核心概念 ​

1.Topic ​

消息的逻辑分类,生产者将消息发送到特定Topic,消费者从Topic消费消息。

特点:

  • 一个Topic可以有多个分区
  • 分区分布在不同的Broker上
  • 支持配置副本数

2.Partition ​

Topic的物理分区,每个Partition是一个有序的、不可变的消息序列。

特点:

  • 消息在分区内有序
  • 分区之间无序
  • 支持水平扩展

3.Offset ​

每条消息在Partition中的唯一标识,是一个递增的整数。

特点:

  • 消费者通过Offset记录消费位置
  • 支持按Offset查询消息
  • 支持重置消费位点

4.Replication ​

每个Partition可以有多个副本,分布在不同的Broker上。

副本类型:

  • Leader:负责读写的主副本
  • Follower:从Leader同步数据的备份副本

ISR机制:

  • In-Sync Replicas:与Leader保持同步的副本集合
  • 只有ISR中的副本才有资格成为新Leader
  • 如果Follower同步延迟超过阈值,会被移出ISR

第二部分 消费者组 ​

一、消费者组概念 ​

1.定义 ​

多个消费者组成一个消费者组,共同消费一个Topic的消息。

2.特点 ​

  • 同一消费者组内的消费者分摊消息
  • 不同消费者组独立消费
  • 每个分区只能被同一组内的一个消费者消费

二、分区分配策略 ​

1.RangeAssignor(默认) ​

按范围分配分区,可能导致分区分配不均。

2.RoundRobinAssignor ​

轮询分配分区,分配更均匀。

3.StickyAssignor ​

粘性分配,尽量保持分配稳定,减少分区重分配。

4.CooperativeStickyAssignor ​

协作式粘性分配,支持增量重平衡。

三、重平衡(Rebalance) ​

1.触发条件 ​

  • 消费者加入或退出消费者组
  • Topic分区数变化
  • 消费者心跳超时

2.重平衡影响 ​

  • 暂停消费
  • 重新分配分区
  • 可能导致重复消费

3.优化建议 ​

  • 增加会话超时时间
  • 增加心跳间隔
  • 使用增量重平衡

第三部分 Spring Boot集成 ​

一、添加依赖 ​

xml
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

二、配置文件 ​

yaml
spring:
  kafka:
    bootstrap-servers: localhost:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      retries: 3
      batch-size: 16384
      buffer-memory: 33554432
    consumer:
      group-id: my-group
      auto-offset-reset: earliest
      enable-auto-commit: false
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    listener:
      ack-mode: manual_immediate

三、生产者配置说明 ​

配置项说明默认值
retries重试次数0
batch-size批量发送大小16384
buffer-memory缓冲区大小33554432
acks确认机制1

四、消费者配置说明 ​

配置项说明默认值
group-id消费者组ID-
auto-offset-reset位点重置策略latest
enable-auto-commit自动提交true
max-poll-records单次拉取最大记录数500