Kafka在Ubuntu上的实用配置建议
sudo apt update && sudo apt install openjdk-11-jdk -y
。配置后通过java -version
验证安装。zoo.cfg
文件(tickTime=2000
、dataDir=/var/lib/zookeeper
、clientPort=2181
),并为每个节点创建myid
文件(内容为节点ID,如1
、2
)。/opt/kafka
(或其他非root目录),创建专用日志目录(如/opt/kafka/logs
),并修改所有权:sudo chown -R kafka:kafka /opt/kafka
(kafka
为用户,需提前创建)。broker.id
(如0
、1
,集群中不可重复);listeners=PLAINTEXT://your_server_ip:9092
(指定Broker监听的IP和端口);advertised.listeners=PLAINTEXT://your_public_ip:9092
(客户端连接的地址,需替换为公网/内网IP)。zookeeper.connect=localhost:2181
(单机部署用localhost
,集群用逗号分隔的ZooKeeper节点地址,如zk1:2181,zk2:2181,zk3:2181
)。log.dirs=/opt/kafka/logs
(指定日志存储目录,建议用独立分区避免磁盘满);log.retention.hours=168
(日志保留7天,可根据需求调整为168
小时或7
天);log.segment.bytes=1073741824
(单个日志段大小为1GB,避免段文件过多影响性能)。num.partitions=3
(默认分区数,根据消费者并行需求调整,如消费者线程数为4则设置为4或更高);default.replication.factor=3
(默认副本因子,集群中至少3个Broker时设置为3,保证数据冗余)。ext4
或XFS
文件系统(XFS
对大文件和高并发支持更好);挂载时添加noatime
选项(减少文件访问时间更新,提升性能)。* soft nofile 100000
、* hard nofile 100000
,写入/etc/security/limits.conf
);调整TCP参数(net.ipv4.tcp_fin_timeout=30
、net.ipv4.tcp_tw_reuse=1
,提升网络连接复用率);禁用swap(sudo swapoff -a
,避免磁盘I/O竞争)。num.io.threads=8
(设置为CPU核心数的2倍,处理磁盘读写请求);num.network.threads=4
(处理网络请求,根据并发量调整)。batch.size=1048576
(批量发送大小为1MB,提升生产者吞吐量);linger.ms=100
(发送延迟100ms,合并小批次);compression.type=snappy
(启用Snappy压缩,减少网络传输量,压缩比约2-3倍)。KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"
,初始和最大堆内存设为相同值,避免频繁GC;根据服务器内存调整,建议不超过物理内存的70%)。default.replication.factor=3
(每个分区有3个副本,分布在不同Broker上);min.insync.replicas=2
(写入时需至少2个副本确认,保证数据可靠性)。kafka-topics.sh --alter
命令调整已有主题的分区数)。ufw
限制端口访问(sudo ufw allow 9092/tcp
、sudo ufw allow 2181/tcp
),仅允许可信IP访问Kafka和ZooKeeper端口。keystore.jks
和truststore.jks
),修改server.properties
中的listeners=SSL://your_server_ip:9092
、ssl.keystore.location=/path/to/keystore.jks
、ssl.keystore.password=your_password
等参数,加密Broker与客户端之间的通信。server.properties
中的security.inter.broker.protocol=SASL_PLAINTEXT
、sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
、sasl.enabled.mechanisms=SCRAM-SHA-256
),并创建用户(通过kafka-configs.sh
命令),防止未授权访问。kafka_server_BrokerTopicMetrics_MessagesInPerSec
、kafka_server_BrokerTopicMetrics_BytesInPerSec
等指标),或使用Kafka自带的kafka-topics.sh
、kafka-consumer-groups.sh
命令查看主题状态和消费者滞后情况。log4j.properties
文件,设置log.retention.hours
和log.segment.bytes
),定期清理旧日志(如每周清理超过7天的日志),避免磁盘空间耗尽。/opt/kafka/logs
)和ZooKeeper数据目录(/var/lib/zookeeper
),可使用rsync
或tar
命令;制定灾难恢复计划(如重新部署集群并恢复数据)。