0%

kafka配置文件

Kafka 核心配置文件详解:server.properties

Kafka 的配置文件是控制集群行为的核心,其中 server.properties 是 Broker 节点的主配置文件,包含了 Broker 身份、网络、存储、日志、ZooKeeper 连接等关键参数。理解这些配置有助于优化 Kafka 性能、确保可靠性,并根据业务场景进行定制。本文将逐节解析 server.properties 中的核心配置项。

Server Basics(服务器基础配置)

1. broker.id

  • 作用:Broker 节点的唯一标识,在集群中必须唯一。
  • 默认值0
  • 说明:
    • 集群中每个 Broker 需配置不同的 broker.id(如 0、1、2…)。
    • 若启用动态 Broker ID(broker.id.generation.enable=true),可自动生成 ID,无需手动配置。

2. delete.topic.enable

  • 作用:控制是否允许删除主题(Topic)。
  • 默认值false(不允许删除)
  • 说明:
    • 生产环境建议设为 true,方便清理无用主题。
    • 主题删除后,相关数据(日志文件、ZooKeeper 元数据)会被彻底删除,操作不可逆。

Socket Server Settings(网络配置)

1. listeners

  • 作用:指定 Broker 监听客户端连接的地址和协议。

  • 默认值:未配置(默认监听 PLAINTEXT://0.0.0.0:9092

  • 格式listener_name://host:port

  • 示例:

    1
    listeners=PLAINTEXT://localhost:9092,SSL://localhost:9093

    表示同时支持明文(PLAINTEXT)和 SSL 加密连接。

2. advertised.listeners

  • 作用:向客户端(生产者 / 消费者)公告的连接地址(如公网地址)。
  • 默认值:与 listeners 相同
  • 说明:
    • 若 Broker 部署在防火墙后或使用 NAT,需配置公网地址,否则客户端可能无法连接。

3. num.network.threads

  • 作用:处理网络请求的线程数(如接收客户端连接、解析请求)。
  • 默认值3
  • 建议:高并发场景可增至 5-10,避免网络线程成为瓶颈。

4. num.io.threads

  • 作用:处理磁盘 I/O 的线程数(如消息写入磁盘、读取日志)。
  • 默认值8
  • 建议:I/O 密集型场景可增至 16-32,需与磁盘性能匹配。

5. 套接字缓冲区配置

  • socket.send.buffer.bytes:发送数据的套接字缓冲区大小(默认 102400 字节,即 100KB)。
  • socket.receive.buffer.bytes:接收数据的套接字缓冲区大小(默认 102400 字节)。
  • socket.request.max.bytes:单个请求的最大字节数(默认 104857600 字节,即 100MB),超过则拒绝。

Log Basics(日志存储基础配置)

1. log.dirs

  • 作用:Kafka 消息日志(分区数据)的存储路径。
  • 默认值/tmp/kafka-logs
  • 说明:
    • 可配置多个路径(用逗号分隔),Kafka 会在路径间平均分配数据,提升 I/O 吞吐量。
    • 生产环境需指定持久化目录(非临时目录),避免重启后数据丢失。

2. num.partitions

  • 作用:新建主题时的默认分区数。
  • 默认值1
  • 建议:根据集群规模和吞吐量需求调整,如设为 3-12(分区数越多,并行度越高,但管理成本增加)。

3. num.recovery.threads.per.data.dir

  • 作用:每个日志目录用于数据恢复和清理的线程数。
  • 默认值1
  • 说明:重启 Broker 时,线程会修复损坏的日志片段,高负载集群可增至 2-4

Internal Topic Settings(内部主题配置)

Kafka 有两个内置主题,用于存储消费者偏移量和事务状态:

  • __consumer_offsets:存储消费者组的偏移量(默认 50 个分区)。
  • __transaction_state:存储事务相关元数据。

1. offsets.topic.replication.factor

  • 作用__consumer_offsets 主题的副本数。
  • 默认值1
  • 建议:生产环境设为 3(至少 2),避免偏移量数据丢失导致消费者重复消费。

2. transaction.state.log.replication.factor

  • 作用__transaction_state 主题的副本数。
  • 默认值1
  • 建议:同偏移量主题,设为 3 确保事务数据可靠。

Log Flush Policy(日志刷盘策略)

控制消息从内存刷新到磁盘的时机,平衡可靠性与性能:

1. log.flush.interval.messages

  • 作用:累计多少条消息后强制刷盘(默认未配置,即不按消息数触发)。

2. log.flush.interval.ms

  • 作用:消息在内存中最长保留时间(默认未配置,即不按时间触发)。
  • 说明:
    • Kafka 默认依赖操作系统页缓存(OS Cache),由 OS 决定刷盘时机(延迟刷盘,提升性能)。
    • 若需强可靠性(如金融场景),可配置 log.flush.interval.ms=1000(每 1 秒刷盘),但会降低吞吐量。

Log Retention Policy(日志保留策略)

控制消息在磁盘上的保留时间或大小,避免存储空间耗尽:

1. log.retention.hours

  • 作用:日志片段(Segment)的保留时间(默认 168 小时,即 7 天)。
  • 扩展配置:
    • log.retention.minutes:按分钟配置(优先级高于小时)。
    • log.retention.ms:按毫秒配置(优先级最高)。

2. log.retention.bytes

  • 作用:单个分区的最大保留字节数(默认未配置,即不限制)。
  • 说明:若超过该值,旧的日志片段会被删除(与时间策略取 “或” 关系)。

3. log.segment.bytes

  • 作用:单个日志片段(Segment)的最大大小(默认 1073741824 字节,即 1GB)。
  • 说明:达到该大小后,会创建新的日志片段,旧片段按保留策略清理。

4. log.retention.check.interval.ms

  • 作用:检查日志片段是否可删除的间隔时间(默认 300000 毫秒,即 5 分钟)。

Zookeeper(ZooKeeper 配置)

Kafka 依赖 ZooKeeper 存储集群元数据(如 Broker 列表、主题配置、分区副本信息)。

1. zookeeper.connect

  • 作用:ZooKeeper 集群地址。

  • 默认值localhost:2181

  • 示例:集群配置(用逗号分隔):

    1
    zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka  # 可选指定 ZooKeeper 根路径

2. zookeeper.connection.timeout.ms

  • 作用:连接 ZooKeeper 的超时时间(默认 6000 毫秒,即 6 秒)。

Group Coordinator Settings(消费者组协调配置)

1. group.initial.rebalance.delay.ms

  • 作用:消费者组初始化时,延迟第一次重平衡(Rebalance)的时间。
  • 默认值0(开发环境),生产环境默认 3000 毫秒(3 秒)。
  • 说明:延迟重平衡可避免消费者启动过程中频繁触发重平衡,减少集群开销。

生产环境关键配置建议

  1. 可靠性
    • offsets.topic.replication.factor=3
    • transaction.state.log.replication.factor=3
    • 主题副本数(replication.factor)≥ 2。
  2. 性能
    • num.network.threads=5-10num.io.threads=16-32
    • log.dirs 配置多个磁盘路径,提升 I/O 并行度。
  3. 存储
    • log.retention.hours=72(根据业务需求调整,如 3 天)
    • log.segment.bytes=1073741824(1GB,避免片段过多)。
  4. 网络
    • 明确配置 listenersadvertised.listeners,确保客户端正常连接

欢迎关注我的其它发布渠道