CentOS 7下Java技术栈环境搭建与配置指南
📅 2026/7/22 10:49:00
👁️ 阅读次数
📝 编程学习
1. 环境准备与基础组件安装
在搭建这套技术栈之前,我们需要先准备好基础环境。我选择CentOS 7作为操作系统平台,因为它兼具稳定性和广泛的社区支持。以下是基础组件的安装步骤:
1.1 JDK安装与配置
Java环境是整个技术栈的基础,这里我选择JDK 8u271版本。安装过程需要注意几个关键点:
#!/bin/bash # 检查安装包是否存在 [ ! -f jdk-8u271-linux-x64.tar.gz ] && echo "JDK安装包不存在" && exit # 解压并移动到标准目录 tar xf jdk-8u271-linux-x64.tar.gz mv jdk1.8.0_271 /usr/local/java # 设置环境变量 cat > /etc/profile.d/java.sh << EOF export JAVA_HOME=/usr/local/java export PATH=\$JAVA_HOME/bin:\$PATH EOF # 立即生效 source /etc/profile.d/java.sh java -version注意:环境变量配置在/etc/profile.d/下比直接修改/etc/profile更规范,便于维护和隔离不同组件的配置。
1.2 Maven安装与配置
Maven 3.5.4版本足够稳定,适合大多数项目:
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz tar xf apache-maven-3.5.4-bin.tar.gz mv apache-maven-3.5.4 /usr/local/maven3.5 cat > /etc/profile.d/maven.sh << EOF export MAVEN_HOME=/usr/local/maven3.5 export PATH=\$MAVEN_HOME/bin:\$PATH EOF source /etc/profile.d/maven.sh mvn -v在实际操作中,我发现国内使用镜像源能显著提高依赖下载速度。可以在~/.m2/settings.xml中配置阿里云镜像:
<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>2. 数据库与中间件安装
2.1 MongoDB安装与安全配置
MongoDB 4.0.21版本在稳定性和功能之间取得了良好平衡。安装时特别注意安全配置:
#!/bin/bash PORT="27017" User="admin" Passwd="your_strong_password" wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-4.0.21.tgz tar -zxvf mongodb-linux-x86_64-rhel62-4.0.21.tgz mv mongodb-linux-x86_64-rhel62-4.0.21/ /usr/local/mongodb mkdir -p /usr/local/mongodb/{data,logs} touch /usr/local/mongodb/logs/mongo.log # 环境变量配置 cat > /etc/profile.d/mongodb.sh << EOF export MONGODB_HOME=/usr/local/mongodb export PATH=\$PATH:\$MONGODB_HOME/bin EOF source /etc/profile.d/mongodb.sh # 配置文件 cat > /usr/local/mongodb/mongo.conf << EOF dbpath=/usr/local/mongodb/data logpath=/usr/local/mongodb/logs/mongo.log logappend=true journal=true quiet=true port=$PORT fork=true bind_ip=0.0.0.0 auth=true EOF # Systemd服务配置 cat > /usr/lib/systemd/system/mongodb.service << EOF [Unit] Description=mongodb After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongo.conf ExecReload=/bin/kill -s HUP \$MAINPID ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongo.conf PrivateTmp=true Restart=always RestartSec=1 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now mongodb # 创建管理员账户 mongo --port $PORT admin --eval "db.createUser({user:'$User',pwd:'$Passwd',roles:['userAdminAnyDatabase','root']})"安全提示:生产环境务必修改默认端口,启用auth并设置复杂密码。bind_ip不要使用0.0.0.0,应该限制为必要IP。
2.2 Zookeeper集群部署
Zookeeper 3.6.1版本对Kafka 2.6.0有良好支持。单节点部署如下:
#!/bin/bash HostIP=$(hostname -I |awk '{print $1}') [ ! -f apache-zookeeper-3.6.1-bin.tar.gz ] && echo "Zookeeper安装包缺失" && exit tar -zxf apache-zookeeper-3.6.1-bin.tar.gz mv apache-zookeeper-3.6.1-bin /usr/local/zookeeper mkdir -p /usr/local/zookeeper/{data,datalog} # 配置文件修改 cd /usr/local/zookeeper/conf cp zoo_sample.cfg zoo.cfg sed -i "s#dataDir=/tmp/zookeeper#dataDir=/usr/local/zookeeper/data#" zoo.cfg echo "dataLogDir=/usr/local/zookeeper/datalog" >> zoo.cfg echo "server.1=$HostIP:2888:3888" >> zoo.cfg echo 1 > /usr/local/zookeeper/data/myid # 环境变量 cat > /etc/profile.d/zookeeper.sh << EOF export ZK_HOME=/usr/local/zookeeper export PATH=\$ZK_HOME/bin:\$PATH EOF source /etc/profile.d/zookeeper.sh # Systemd服务 cat > /usr/lib/systemd/system/zookeeper.service << EOF [Unit] Description=zookeeper.service After=network.target ConditionPathExists=/usr/local/zookeeper/conf/zoo.cfg [Service] Type=forking Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java/bin" User=root Group=root ExecStart=/usr/local/zookeeper/bin/zkServer.sh start ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now zookeeper集群部署时,需要在所有节点上:
- 配置相同的zoo.cfg,包含所有server条目
- 每个节点的myid文件内容要唯一(1,2,3...)
- 防火墙开放2888和3888端口
3. Kafka集群部署与管理
3.1 Kafka核心安装
Kafka 2.6.0版本与前述组件版本匹配良好:
#!/bin/bash HostIP=$(hostname -I |awk '{print $1}') PORT=9092 [ ! -f kafka_2.13-2.6.0.tgz ] && echo "Kafka安装包缺失" && exit tar -zxf kafka_2.13-2.6.0.tgz mv kafka_2.13-2.6.0 /usr/local/kafka mkdir -p /usr/local/kafka/kafka-logs # 配置文件调整 cd /usr/local/kafka/config cp server.properties server.properties.bak sed -i "s#broker.id=0#broker.id=1#" server.properties sed -i "s#log.dirs=/tmp/kafka-logs#log.dirs=/usr/local/kafka/kafka-logs#" server.properties echo "listeners=PLAINTEXT://:$PORT" >> server.properties echo "advertised.listeners=PLAINTEXT://$HostIP:$PORT" >> server.properties # 环境变量 cat > /etc/profile.d/kafka.sh << EOF export KAFKA_HOME=/usr/local/kafka export PATH=\$KAFKA_HOME/bin:\$PATH EOF source /etc/profile.d/kafka.sh # Systemd服务 cat > /usr/lib/systemd/system/kafka.service << EOF [Unit] Description=Apache Kafka server (broker) After=network.target zookeeper.service [Service] Type=simple Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java/bin" User=root Group=root ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now kafka关键配置说明:
- broker.id:集群中必须唯一
- log.dirs:建议使用高性能磁盘单独挂载
- listeners/advertised.listeners:内外网访问配置
- zookeeper.connect:集群模式下配置所有ZK节点
3.2 Kafka基础操作
创建topic:
kafka-topics.sh --create --zookeeper localhost:2181 \ --replication-factor 1 --partitions 3 --topic test生产消息:
kafka-console-producer.sh --broker-list localhost:9092 --topic test消费消息:
kafka-console-consumer.sh --bootstrap-server localhost:9092 \ --topic test --from-beginning查看topic列表:
kafka-topics.sh --list --zookeeper localhost:21814. Kafka-Manager可视化监控
4.1 安装与配置
Kafka-Manager 2.0.0.2提供了友好的Web界面:
#!/bin/bash [ ! -f kafka-manager-2.0.0.2.zip ] && echo "Kafka-Manager安装包缺失" && exit unzip kafka-manager-2.0.0.2.zip mv kafka-manager-2.0.0.2 /usr/local/kafka-manager # 修改配置 cd /usr/local/kafka-manager/conf sed -i 's#"kafka-manager-zookeeper:2181"#"localhost:2181"#' application.conf # 启动 nohup /usr/local/kafka-manager/bin/kafka-manager \ -Dconfig.file=/usr/local/kafka-manager/conf/application.conf \ -Dhttp.port=8090 -java-home /usr/local/java &4.2 使用技巧
- 集群添加:通过Web界面添加集群时,填写正确的ZK地址和Kafka版本
- 监控指标:关注Under Replicated Partitions和Offline Partitions Count
- 消费者监控:可以查看消费滞后情况
- 主题操作:支持创建、删除、扩分区等操作
生产环境建议启用basicAuthentication.enabled=true并配置强密码
5. 系统集成与优化
5.1 组件连通性验证
- 验证ZK与Kafka连接:
echo stat | nc localhost 2181 | grep Mode kafka-topics.sh --list --zookeeper localhost:2181- 验证MongoDB连接:
mongo --host localhost --port 27017 -u admin -p your_password --authenticationDatabase admin- 验证Kafka-Manager: 访问http://your-server-ip:8090
5.2 性能优化建议
- Kafka优化:
- 调整num.io.threads和num.network.threads
- 优化log.retention.hours和log.segment.bytes
- 考虑使用SSD存储日志
- MongoDB优化:
- 配置WiredTiger缓存大小
- 建立合适的索引
- 启用journaling
- 系统层面:
- 调整文件描述符限制
- 优化swap和内存配置
- 考虑使用cgroup限制资源
5.3 常见问题排查
- Kafka启动失败:
- 检查ZK连接
- 验证broker.id唯一性
- 查看日志/usr/local/kafka/logs/server.log
- 生产者无法发送消息:
- 检查advertised.listeners配置
- 验证防火墙设置
- 检查topic是否存在
- MongoDB连接问题:
- 检查auth是否启用
- 验证bind_ip配置
- 查看/usr/local/mongodb/logs/mongo.log
这套技术栈整合了消息队列、分布式协调和文档数据库,非常适合构建现代分布式系统。在实际部署中,根据业务规模合理规划集群节点数量和资源配置是关键。
编程学习
技术分享
实战经验