乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 第1章 消息队列与 Kafka 概述

    • 章节导读
    • 消息队列基础
    • Kafka 概述
    • Kafka 为什么快
  • 第2章 快速上手:单机环境搭建

    • 章节导读
    • 环境准备与安装
    • 快速启动
    • Topic 管理
  • 第3章 核心概念:主题、分区与日志

    • 章节导读
    • Topic
    • Partition
    • Offset
    • Segment 与存储结构
  • 第4章 生产者详解

    • 章节导读
    • Producer 概述
    • Producer 发送机制
    • Producer 分区策略
    • Producer 幂等与事务
    • Producer 配置
  • 第5章 消费者与消费组

    • 章节导读
    • Consumer 概述
    • Consumer Group 消费组
    • Consumer 分区分配策略
    • Consumer Offset 提交
    • Consumer 多线程
    • Consumer 配置
  • 第6章 Broker 与控制器

    • 章节导读
    • Broker 概述
    • Broker 配置
    • Controller
    • KRaft 共识协议
  • 第7章 副本与数据可靠性

    • 章节导读
    • 副本机制
    • ISR 与副本同步
    • Leader 选举
    • ACK 与一致性保证
    • 高水位与 Leader Epoch
  • 第8章 存储与性能优化

    • 章节导读
    • 存储架构
    • 日志清理与压缩
    • Page Cache 与零拷贝
    • Producer 性能优化
    • Consumer 性能优化
    • Broker 性能优化
  • 第9章 生产环境运维与监控

    • 章节导读
    • Topic 管理
    • Kafka 运维工具
    • 监控
    • 常见故障排查
  • 第10章 Kafka生态与面试考点

    • 章节导读
    • Kafka 生态全景
    • 面试高频 30 题

Broker 配置

定义与作用

本节提供 Broker 端关键配置参数的速查表。Broker 是 Kafka 集群的物理承载者,其配置直接影响可靠性、性能和运维复杂度。

配置速查表

核心标识

参数默认值说明
broker.id-1(必须设置)Broker 唯一标识(ZooKeeper 模式)
node.id(KRaft 必填)节点唯一标识(KRaft 模式)
process.roles—broker,controller 或单独一个

网络

参数默认值说明建议
listenersPLAINTEXT://:9092监听地址和协议内网 PLAINTEXT,外网 SSL
advertised.listenerslisteners 的值对外广播地址云环境必须设置(公网 IP/域名)
num.network.threads3网络线程数高吞吐可设为核心数
num.io.threads8I/O 线程数不少于磁盘数 × 2

存储

参数默认值说明建议
log.dirs/tmp/kafka-logs数据目录(可多目录逗号分隔)生产用独立 SSD,多目录并行 I/O
log.segment.bytes1073741824 (1GB)Segment 文件大小保持在 512MB-1GB
log.retention.hours168 (7天)消息保留时长按业务和法律要求设置
log.retention.bytes-1 (无限)按大小保留防止磁盘写满
log.cleanup.policydelete清理策略:delete/compact保留最新状态用 compact

副本与可靠性

参数默认值说明建议
default.replication.factor1自动创建的 Topic 默认副本数生产设 3
min.insync.replicas1最小同步副本数生产设 2(全局)或 Topic 级别
unclean.leader.election.enablefalse是否允许非 ISR 副本成为 Leader生产必须 false
num.replica.fetchers1Follower 拉取 Leader 的线程数吞吐高时可增加

压缩

参数默认值说明
compression.typeproducerproducer(保留源压缩)/uncompressed/lz4等
message.max.bytes1048588 (1MB)单条消息最大大小

Controller(KRaft)

参数默认值说明
controller.quorum.voters—Quorum 节点列表
controller.listener.names—Controller 通信的监听器名

完整示例

示例一:生产环境 Broker 配置

场景:3 节点 Kafka 集群,每节点 2 块 SSD,内网通信。

# Broker 标识
node.id=1
process.roles=broker,controller

# 网络
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://kafka1.internal:9092
controller.listener.names=CONTROLLER
controller.quorum.voters=1@kafka1.internal:9093,2@kafka2.internal:9093,3@kafka3.internal:9093

# 存储
log.dirs=/data/ssd1/kafka,/data/ssd2/kafka
log.segment.bytes=1073741824
log.retention.hours=168
log.retention.bytes=107374182400     # 100GB

# 副本与可靠性
default.replication.factor=3
min.insync.replicas=2
unclean.leader.election.enable=false
num.replica.fetchers=4

# I/O 线程
num.network.threads=8
num.io.threads=16

示例二:动态调整 Broker 配置(无需重启)

# 调整日志保留时间为 3 天(动态生效,无需重启)
bin/kafka-configs.sh --bootstrap-server localhost:9092 \
  --entity-type brokers --entity-name 1 \
  --alter --add-config log.retention.hours=72

# 查看动态配置
bin/kafka-configs.sh --bootstrap-server localhost:9092 \
  --entity-type brokers --entity-name 1 --describe

# 删除动态配置(恢复默认)
bin/kafka-configs.sh --bootstrap-server localhost:9092 \
  --entity-type brokers --entity-name 1 \
  --alter --delete-config log.retention.hours

易错场景

易错 1:advertised.listeners 未设置在云环境

场景:Kafka 在 AWS EC2 上,listeners=PLAINTEXT://:9092 但未设 advertised.listeners。

后果:Broker 返回内部私有 IP 给客户端,客户端(可能在外网)无法连接。

正确做法:

listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://ec2-54-123-45-67.compute-1.amazonaws.com:9092

易错 2:log.dirs 使用网络存储(NFS)

场景:将 log.dirs 指向 NFS 挂载点以简化备份。

后果:Kafka 依赖顺序 I/O 和 Page Cache 的高性能,网络存储的延迟和带宽严重降低吞吐。

规则:log.dirs 必须是本地磁盘(优先 SSD)。

面试高频考点

Q:unclean.leader.election.enable 设为 true 会带来什么风险?

A:当 ISR 中所有副本都故障时,此参数允许选择不在 ISR 中的副本(可能有数据缺失)成为 Leader。代价是数据丢失——该副本的数据可能比 ISR 中的副本少。

场景:
  ISR=[1,2,3] → Broker 1,2,3 同时故障(极小概率)
  非 ISR 副本 Broker 4 存活但数据落后 500 条
  
  unclean.leader.election.enable=true  → Broker 4 成为 Leader → 500 条消息永久丢失
  unclean.leader.election.enable=false → 分区不可用,等待至少一个 ISR 副本恢复

生产建议:数据准确性要求高的系统(交易、支付)必须设为 false,宁可不可用也不丢数据。日志收集等可容忍少量丢失的场景可设 true。

上一页
Broker 概述
下一页
Controller