Kafka 配置详解
文章目录
Apache Kafka 是一个分布式流处理平台,其配置项繁多且复杂。以下是 Kafka 主要配置项的详细说明,分为 Broker、Producer、Consumer 和 Topic 四个部分。
一、Broker 配置
1. 基础配置
broker.id:每个 broker 的唯一标识符,必须是整数且集群内唯一listeners:broker 监听的地址列表,格式为PLAINTEXT://hostname:portadvertised.listeners:客户端连接 broker 的地址log.dirs:Kafka 日志(数据)存储目录,可配置多个目录(逗号分隔)num.partitions:创建 topic 时的默认分区数default.replication.factor:创建 topic 时的默认副本数
2. ZooKeeper 相关
zookeeper.connect:ZooKeeper 连接字符串,格式为host1:port1,host2:port2,.../pathzookeeper.connection.timeout.ms:ZooKeeper 连接超时时间,默认 6000ms
3. 网络与性能
num.network.threads:处理网络请求的线程数,默认 3num.io.threads:处理磁盘 I/O 的线程数,通常设置为磁盘数socket.send.buffer.bytes:socket 发送缓冲区大小,默认 102400socket.receive.buffer.bytes:socket 接收缓冲区大小,默认 102400socket.request.max.bytes:单个请求最大字节数,默认 104857600 (100MB)
4. 日志管理
log.retention.hours:日志保留小时数log.retention.bytes:日志保留大小(所有分区总和)log.segment.bytes:单个日志段文件大小,默认 1073741824 (1GB)log.cleanup.policy:日志清理策略,delete或compactlog.flush.interval.messages:多少条消息后强制刷盘log.flush.interval.ms:多少毫秒后强制刷盘
5. 副本与ISR
default.replication.factor:默认副本数min.insync.replicas:最小同步副本数unclean.leader.election.enable:是否允许非同步副本成为 leader,默认 falsereplica.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.StringSerializervalue.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:发送失败重试次数,默认 2147483647retry.backoff.ms:重试间隔时间,默认 100msmax.in.flight.requests.per.connection:单个连接上未确认请求的最大数量,默认 5
三、Consumer 配置
1. 基础配置
bootstrap.servers:Kafka broker 地址列表group.id:消费者组 IDclient.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 调用返回的最大记录数,默认 500max.poll.interval.ms:两次 poll 调用的最大间隔,默认 300000ms (5分钟)session.timeout.ms:消费者会话超时时间,默认 10000ms (10秒)heartbeat.interval.ms:心跳间隔时间,默认 3000ms
四、Topic 配置
1. 基础配置
num.partitions:分区数replication.factor:副本数cleanup.policy:清理策略,delete或compact
2. 高级配置
min.insync.replicas:最小同步副本数retention.ms:消息保留时间retention.bytes:消息保留大小segment.bytes:日志段大小segment.ms:日志段滚动时间message.timestamp.type:时间戳类型,CreateTime或LogAppendTime
五、重要配置建议
- 生产环境建议配置:
unclean.leader.election.enable=false:防止数据丢失min.insync.replicas=2:确保高可用default.replication.factor=3:标准副本数log.retention.hours=168(7天):合理的保留时间
- 性能调优建议:
- 根据磁盘数量设置
num.io.threads - 根据网络带宽调整
socket.send/receive.buffer.bytes - 根据消息大小调整
message.max.bytes和replica.fetch.max.bytes
- 根据磁盘数量设置
- 消费者重要配置:
- 根据处理能力设置
max.poll.records - 确保
session.timeout.ms>heartbeat.interval.ms* 3
- 根据处理能力设置
以上配置需要根据实际业务需求、硬件环境和性能要求进行调整。
2090

被折叠的 条评论
为什么被折叠?



