Kafka 配置详解

Kafka 配置详解


Apache Kafka 是一个分布式流处理平台,其配置项繁多且复杂。以下是 Kafka 主要配置项的详细说明,分为 Broker、Producer、Consumer 和 Topic 四个部分。

一、Broker 配置

1. 基础配置

  • broker.id:每个 broker 的唯一标识符,必须是整数且集群内唯一
  • listeners:broker 监听的地址列表,格式为 PLAINTEXT://hostname:port
  • advertised.listeners:客户端连接 broker 的地址
  • log.dirs:Kafka 日志(数据)存储目录,可配置多个目录(逗号分隔)
  • num.partitions:创建 topic 时的默认分区数
  • default.replication.factor:创建 topic 时的默认副本数

2. ZooKeeper 相关

  • zookeeper.connect:ZooKeeper 连接字符串,格式为 host1:port1,host2:port2,.../path
  • zookeeper.connection.timeout.ms:ZooKeeper 连接超时时间,默认 6000ms

3. 网络与性能

  • num.network.threads:处理网络请求的线程数,默认 3
  • num.io.threads:处理磁盘 I/O 的线程数,通常设置为磁盘数
  • socket.send.buffer.bytes:socket 发送缓冲区大小,默认 102400
  • socket.receive.buffer.bytes:socket 接收缓冲区大小,默认 102400
  • socket.request.max.bytes:单个请求最大字节数,默认 104857600 (100MB)

4. 日志管理

  • log.retention.hours:日志保留小时数
  • log.retention.bytes:日志保留大小(所有分区总和)
  • log.segment.bytes:单个日志段文件大小,默认 1073741824 (1GB)
  • log.cleanup.policy:日志清理策略,deletecompact
  • log.flush.interval.messages:多少条消息后强制刷盘
  • log.flush.interval.ms:多少毫秒后强制刷盘

5. 副本与ISR

  • default.replication.factor:默认副本数
  • min.insync.replicas:最小同步副本数
  • unclean.leader.election.enable:是否允许非同步副本成为 leader,默认 false
  • replica.lag.time.max.ms:副本落后 leader 的最大时间,超过则从 ISR 中移除

二、Producer 配置

1. 基础配置

  • bootstrap.servers:Kafka broker 地址列表,格式为 host1:port1,host2:port2,...
  • client.id:客户端标识符

2. 序列化配置

  • key.serializer:key 的序列化类,如 org.apache.kafka.common.serialization.StringSerializer
  • value.serializer:value 的序列化类

3. 消息发送

  • acks:消息确认机制

    • 0:不等待确认
    • 1:等待 leader 确认
    • all:等待所有同步副本确认
  • buffer.memory:生产者缓冲区大小,默认 33554432 (32MB)

  • compression.type:压缩类型,可选 none, gzip, snappy, lz4, zstd

  • batch.size:批量发送大小,默认 16384 (16KB)

  • linger.ms:发送延迟时间,默认 0(立即发送)

4. 重试与错误处理

  • retries:发送失败重试次数,默认 2147483647
  • retry.backoff.ms:重试间隔时间,默认 100ms
  • max.in.flight.requests.per.connection:单个连接上未确认请求的最大数量,默认 5

三、Consumer 配置

1. 基础配置

  • bootstrap.servers:Kafka broker 地址列表
  • group.id:消费者组 ID
  • client.id:客户端标识符

2. 反序列化配置

  • key.deserializer:key 的反序列化类
  • value.deserializer:value 的反序列化类

3. 消费行为

  • auto.offset.reset :当无初始偏移量或偏移量无效时

    • earliest:从最早开始
    • latest:从最新开始
    • none:抛出异常
  • enable.auto.commit:是否自动提交偏移量,默认 true

  • auto.commit.interval.ms:自动提交间隔,默认 5000ms

  • fetch.min.bytes:每次 fetch 请求最小字节数,默认 1

  • fetch.max.wait.ms:fetch 请求最长等待时间,默认 500ms

  • max.partition.fetch.bytes:每个分区返回的最大数据量,默认 1048576 (1MB)

4. 并发与心跳

  • max.poll.records:单次 poll 调用返回的最大记录数,默认 500
  • max.poll.interval.ms:两次 poll 调用的最大间隔,默认 300000ms (5分钟)
  • session.timeout.ms:消费者会话超时时间,默认 10000ms (10秒)
  • heartbeat.interval.ms:心跳间隔时间,默认 3000ms

四、Topic 配置

1. 基础配置

  • num.partitions:分区数
  • replication.factor:副本数
  • cleanup.policy:清理策略,deletecompact

2. 高级配置

  • min.insync.replicas:最小同步副本数
  • retention.ms:消息保留时间
  • retention.bytes:消息保留大小
  • segment.bytes:日志段大小
  • segment.ms:日志段滚动时间
  • message.timestamp.type:时间戳类型,CreateTimeLogAppendTime

五、重要配置建议

  1. 生产环境建议配置
    • unclean.leader.election.enable=false:防止数据丢失
    • min.insync.replicas=2:确保高可用
    • default.replication.factor=3:标准副本数
    • log.retention.hours=168(7天):合理的保留时间
  2. 性能调优建议
    • 根据磁盘数量设置 num.io.threads
    • 根据网络带宽调整 socket.send/receive.buffer.bytes
    • 根据消息大小调整 message.max.bytesreplica.fetch.max.bytes
  3. 消费者重要配置
    • 根据处理能力设置 max.poll.records
    • 确保 session.timeout.ms > heartbeat.interval.ms * 3

以上配置需要根据实际业务需求、硬件环境和性能要求进行调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值