系统要求
io_uring异步I/O)。sudo yum install java-11-openjdk-devel -y,验证:java -version。依赖组件
dataDir(数据目录)、clientPort(客户端端口,默认2181)及server.x(集群节点列表)。Broker标识与监听
broker.id:每个broker的唯一整数标识(集群内不可重复),建议使用主机名哈希值(如broker.id=$(hostname | awk -F'-' '{print $NF}'))。listeners:指定broker监听的协议与地址(如SASL_PLAINTEXT://0.0.0.0:9092),其中0.0.0.0表示监听所有网卡(生产环境建议限制为内网IP)。advertised.listeners:客户端连接的地址(如SASL_PLAINTEXT://your-broker-ip:9092),需替换为客户端可访问的IP(若broker有多个网卡,需指定具体IP)。日志与存储
log.dirs:日志存储目录(多目录用逗号分隔,如/data/kafka-logs1,/data/kafka-logs2),建议分布在不同物理磁盘(提升并行I/O性能)。log.retention.hours:日志保留时间(默认168小时,即7天),可根据业务需求调整为log.retention.bytes(日志大小上限,如107374182400表示100GB),避免磁盘空间耗尽。分区与副本
num.partitions:Topic默认分区数(生产环境建议根据吞吐量需求设置为3-10,分区越多并行度越高,但会增加管理复杂度)。default.replication.factor:Topic默认副本数(生产环境建议设置为3,保证数据冗余,避免单点故障)。内核参数调整
vm.swappiness=1(默认60),减少内存页交换到磁盘(避免因swap导致的性能骤降)。net.core.rmem_default=262144(接收缓冲区默认值)、net.core.wmem_default=262144(发送缓冲区默认值)、net.core.rmem_max=2097152(接收缓冲区最大值)、net.core.wmem_max=2097152(发送缓冲区最大值),提升网络吞吐量。vm.dirty_background_ratio=5(脏页占比达到5%时触发后台刷新)、vm.dirty_ratio=10(脏页占比达到10%时强制刷新),平衡I/O性能与数据安全性。文件系统优化
noatime(不更新文件访问时间戳,减少磁盘I/O)。示例:mount -o noatime /dev/sdb1 /data/kafka-logs。Kafka Broker参数
num.network.threads:处理网络请求的线程数(默认3),建议设置为CPU核数+1(如8核CPU设置为9),提升网络请求处理能力。num.io.threads:处理磁盘I/O的线程数(默认8),建议设置为CPU核数的2倍(如8核CPU设置为16),提升磁盘写入/读取效率。log.segment.bytes:日志段大小(默认1GB),建议设置为1GB(平衡日志切换频率与磁盘I/O效率)。message.max.bytes:单条消息最大大小(默认1MB),可根据业务需求调整为10MB(如传输大文件时),但需同步调整replica.fetch.max.bytes(副本同步的最大消息大小)。JVM优化
-Xms(初始堆内存)与-Xmx(最大堆内存)为相同值(如-Xms4G -Xmx4G),避免堆内存动态调整带来的性能开销。-XX:+UseG1GC,并调整-XX:MaxGCPauseMillis=200(目标最大GC停顿时间,单位毫秒)。认证与授权
security.inter.broker.protocol=SASL_PLAINTEXT(broker间通信协议)、sasl.enabled.mechanisms=PLAIN(支持的认证机制)、sasl.mechanism.inter.broker.protocol=PLAIN(broker间认证机制)。kafka_server_jaas.conf文件,内容如下:KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_producer="producer-secret"
user_consumer="consumer-secret";
};
启动Kafka时指定JAAS文件:export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"。防火墙配置
sudo firewall-cmd --zone=public --add-port=9092/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2181/tcp --permanent
sudo firewall-cmd --reload
监控工具
kafka_server_、kafka_controller_等JMX指标),可视化展示吞吐量、延迟、分区状态等指标。kafka-topics.sh(查看Topic信息)、kafka-consumer-groups.sh(查看消费者组状态)、kafka-run-class.sh kafka.tools.JmxTool(查看JMX指标)。日志管理
log.cleanup.policy=delete(删除旧日志,默认策略)、log.retention.hours=168(保留7天)、log.segment.bytes=1073741824(日志段大小1GB)。kafka-console-consumer.sh导出数据到HDFS或S3)。通过以上配置优化,可在CentOS上搭建一个高性能、高可用、安全的Kafka集群,满足大规模消息处理需求。需注意的是,具体参数需根据实际业务负载(如消息量、并发数)进行调整,建议在测试环境中验证后再应用于生产环境。