在Debian上稳定部署Kafka可以通过手动安装或Docker部署两种方式实现。以下是详细的步骤:
安装Java: Kafka需要Java运行环境,推荐使用OpenJDK 11或更高版本。
sudo apt update
sudo apt install openjdk-11-jdk -y
java -version
下载并解压Kafka: 从Apache Kafka官网下载最新版本的Kafka,并解压到指定目录。
wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
tar -xzf kafka_2.13-3.6.1.tgz
mv kafka_2.13-3.6.1 /opt/kafka
配置Kafka:
编辑每个节点的config/kraft/server.properties
文件,配置以下参数:
process.roles=broker,controller
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=PLAINTEXT
controller.listener.names=CONTROLLER
advertised.listeners=PLAINTEXT://<当前节点IP>:9092
node.id=<节点ID>
controller.quorum.voters=1@<节点IP>:9093,2@<第二个节点IP>:9093,3@<第三个节点IP>:9093
log.dirs=/data/kafka/logs
auto.create.topics.enable=true
num.partitions=3
default.replication.factor=3
初始化集群元数据: 在任意一个节点上执行以下命令初始化集群元数据:
cd /opt/kafka
bin/kafka-storage.sh format -t $(bin/kafka-storage.sh random-uuid) -c config/kraft/server.properties
启动Kafka集群: 在每个节点上启动Kafka服务器:
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/kraft/server.properties
验证集群状态: 使用以下命令检查集群元数据和测试Topic自动创建:
bin/kafka-metadata-shell.sh --snapshot /data/kafka/logs/__cluster_metadata-0/00000000000000000000.log
bin/kafka-topics.sh --bootstrap-server <节点IP>:9092 --describe --topic auto-created-topic
安装Docker和Docker Compose: 确保已安装Docker和Docker Compose,并分配足够的内存(至少4GB)。
创建docker-compose.yml文件:
在项目目录下创建docker-compose.yml
文件,内容如下:
version: '3.8'
services:
kafka1:
image: apache/kafka:3.6.1
ports:
- "9092:9092"
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka1:9093,2@kafka2:9094,3@kafka3:9095
KAFKA_DEFAULT_REPLICATION_FACTOR: 3
KAFKA_MIN_INSYNC_REPLICAS: 2
volumes:
- kafka1-data:/kafka/log
volumes:
kafka1-data:
启动Kafka集群: 在项目目录下执行以下命令启动Kafka集群:
docker-compose up -d
验证集群状态: 使用以下命令检查集群元数据和测试Topic自动创建:
docker exec -it <kafka1容器ID> kafka-metadata-shell.sh --snapshot /kafka/logs/__cluster_metadata-0/00000000000000000000.log
docker exec -it <kafka1容器ID> kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic auto-created-topic