Kafka在Linux环境下集群搭建步骤
Kafka依赖Java运行环境(推荐OpenJDK 8或11),以Ubuntu/Debian为例,安装命令如下:
sudo apt update && sudo apt install -y openjdk-8-jdk
验证安装:
java -version # 应输出Java版本信息(如openjdk version "1.8.0_392")
CentOS/RHEL系统替换为:
sudo yum install -y java-1.8.0-openjdk-devel
Kafka 3.5+版本支持KRaft模式(无需ZooKeeper),但传统集群仍需ZooKeeper。以下为ZooKeeper集群部署步骤:
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
mv apache-zookeeper-3.7.1-bin /usr/local/zookeeper
/usr/local/zookeeper/conf/zoo.cfg,添加以下内容(以3节点为例):tickTime=2000
initLimit=5
syncLimit=2
dataDir=/var/lib/zookeeper # 数据目录(需提前创建:sudo mkdir -p /var/lib/zookeeper)
clientPort=2181
server.1=zoo1:2888:3888 # 节点1,2888用于Leader选举,3888用于Leader与Follower通信
server.2=zoo2:2888:3888 # 节点2
server.3=zoo3:2888:3888 # 节点3
在每个ZooKeeper节点的dataDir目录下创建myid文件,内容为对应server.X中的X(如节点1的myid内容为1):echo 1 > /var/lib/zookeeper/myid # 节点1
echo 2 > /var/lib/zookeeper/myid # 节点2
echo 3 > /var/lib/zookeeper/myid # 节点3
cd /usr/local/zookeeper/bin
./zkServer.sh start
验证状态:./zkServer.sh status # 应显示“Mode: leader”或“Mode: follower”
从Apache官网下载最新稳定版Kafka(如3.6.0),解压至指定目录:
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -zxvf kafka_2.13-3.6.0.tgz
mv kafka_2.13-3.6.0 /usr/local/kafka
建议将Kafka目录所有者改为运行用户(如kafka):
sudo chown -R kafka:kafka /usr/local/kafka
编辑每个Kafka节点的config/server.properties文件,关键参数如下:
broker.id必须唯一(如节点1设为1,节点2设为2);zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181(若使用KRaft模式,后续需替换为controller配置);listeners=PLAINTEXT://your_server_ip:9092(替换为节点实际IP,若为测试环境可使用localhost);log.dirs=/var/lib/kafka-logs(需提前创建目录并授权:sudo mkdir -p /var/lib/kafka-logs && sudo chown -R kafka:kafka /var/lib/kafka-logs);default.replication.factor=3(副本数,生产环境建议≥3)、num.partitions=3(默认分区数,根据吞吐量调整);num.network.threads=3(网络线程数)、num.io.threads=8(IO线程数)、log.retention.hours=168(日志保留时间,单位:小时)。在每个节点上执行以下命令启动Kafka服务(后台运行):
cd /usr/local/kafka/bin
./kafka-server-start.sh -daemon ../config/server.properties
验证Kafka进程是否启动:
jps # 应显示“Kafka”进程
在任意节点上创建Topic(副本数设为3,分区数设为3):
./kafka-topics.sh --create --bootstrap-server zoo1:9092 --replication-factor 3 --partitions 3 --topic test-topic
查看Topic列表:
./kafka-topics.sh --list --bootstrap-server zoo1:9092
./kafka-console-producer.sh --bootstrap-server zoo1:9092 --topic test-topic
输入测试消息(如“Hello Kafka Cluster”)。./kafka-console-consumer.sh --bootstrap-server zoo1:9092 --topic test-topic --from-beginning
应能接收到生产者发送的消息,说明集群通信正常。firewall-cmd --add-port=2181/tcp --permanent);unclean.leader.election.enable=false(禁止非同步副本成为Leader,避免数据丢失)、auto.leader.rebalance.enable=false(关闭自动Leader重平衡,减少不必要的切换);server.properties中的process.roles=broker,controller、node.id等参数,具体参考官方文档。