配置Kafka网络参数需要考虑多个方面,包括Broker端参数、ZooKeeper相关配置、Broker连接相关配置以及Topic管理相关配置等。以下是详细的配置步骤和说明:
存储相关配置:
log.dirs
:指定Broker需要使用的若干个文件目录路径。建议配置多个路径,并保证这些目录挂载到不同的物理磁盘上,以提升读写性能和实现故障转移。log.dir
:注意这是dir
,结尾没有s
,只能表示单个路径。ZooKeeper相关配置:
zookeeper.connect
:配置ZooKeeper的连接信息,使用CSV格式,如zk1:2181,zk2:2181,zk3:2181
。多个Kafka集群可以使用同一套ZooKeeper集群,并通过chroot
参数进行隔离。Broker连接相关配置:
listeners
:告诉外部连接者要通过什么协议访问指定主机名和端口开放的Kafka服务。格式为<协议名称,主机名,端口号>
。advertised.listeners
:与listeners
相比多了个advertised
,表示宣称的、公布的地址。主要用于外网访问。Topic管理相关配置:
auto.create.topics.enable
:是否允许自动创建Topic,建议设置为false
。unclean.leader.election.enable
:是否允许Unclean Leader选举,建议设置为false
。吞吐量优先:
num.partitions
:设置为与消费者的线程数基本相等。batch.size
:批量提交消息的字节数,建议设置为1M。linger.ms
:发送间隔时间,建议设置为100ms以上。compression.type
:压缩类型,可以使用lz4
压缩。acks
:应答机制,建议设置为all
。延迟优先:
linger.ms
:设置为0,即有消息就发送。compression.type
:设置为none
。acks
:设置为0,异步发送。可靠性优先:
default.replication.factor
:至少设置为3。min.insync.replicas
:当生产者的acks
设置为all
时,必须满足该数量的副本同步成功后才能继续写入。unclean.leader.election.enable
:设置为false
。可用性优先:
num.io.threads
:负责写磁盘的线程数,数值应该大于硬盘数。num.replica.fetchers
:副本拉取线程数,占总核数的50%的1/3。num.network.threads
:数据传输线程数,占总核数的50%的2/3。listener.security.protocol.map
进行内外网分流配置。listeners
和advertised.listeners
分别配置内网和外网地址。例如:
# 内网访问
listeners=PLAINTEXT://192.168.0.213:9092
advertised.listeners=PLAINTEXT://192.168.0.213:9092
# 外网访问
listeners=PLAINTEXT://101.89.163.1:9092
advertised.listeners=PLAINTEXT://101.89.163.1:9092
通过以上配置,可以确保Kafka在不同场景下都能高效、稳定地运行,并满足不同访问需求。