Kafka集群在Debian上的部署策略
Kafka依赖Java运行时环境(JRE/JDK),推荐安装OpenJDK 8或更高版本(Kafka 3.x及以上建议使用Java 11+)。在Debian上执行以下命令安装:
sudo apt update
sudo apt install -y openjdk-11-jdk
java -version # 验证安装(需显示Java版本信息)
Kafka通过Zookeeper实现集群协调(元数据管理、Leader选举),需先部署Zookeeper集群(建议3节点,实现高可用)。
wget https://downloads.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
tar -xzf apache-zookeeper-3.8.0-bin.tar.gz
sudo mv apache-zookeeper-3.8.0 /opt/zookeeper
/opt/zookeeper/conf/zoo.cfg,添加以下核心配置:tickTime=2000
dataDir=/var/lib/zookeeper # 数据目录(需提前创建)
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888 # 集群节点地址(替换为实际主机名/IP)
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
在每个Zookeeper节点的dataDir目录下创建myid文件(内容为节点ID,如zoo1节点为1):echo "1" | sudo tee /var/lib/zookeeper/myid # zoo1节点
echo "2" | sudo tee /var/lib/zookeeper/myid # zoo2节点
echo "3" | sudo tee /var/lib/zookeeper/myid # zoo3节点
/opt/zookeeper/bin/zkServer.sh start
/opt/zookeeper/bin/zkServer.sh status # 验证状态(需显示"Mode: leader/follower")
从Apache官网下载最新稳定版Kafka(如3.5.2),解压至指定目录:
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.13-3.5.2.tgz
tar -xzf kafka_2.13-3.5.2.tgz
sudo mv kafka_2.13-3.5.2 /opt/kafka
编辑/opt/kafka/config/server.properties,设置以下关键参数(每台Broker需唯一配置):
# Broker唯一标识(集群内不可重复)
broker.id=1
# 监听地址(本地所有接口)
listeners=PLAINTEXT://:9092
# 对外暴露的地址(客户端连接的地址)
advertised.listeners=PLAINTEXT://your.kafka.server.ip:9092
# 日志存储目录(需提前创建,建议挂载大容量磁盘)
log.dirs=/var/lib/kafka/logs
# Zookeeper集群地址(逗号分隔)
zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181
# 集群分区数(默认分区数,创建Topic时可覆盖)
num.partitions=3
# 默认副本因子(确保高可用,建议3)
default.replication.factor=3
# 最小同步副本数(写入时需满足的副本数,建议2)
min.insync.replicas=2
# 网络线程数(建议等于CPU核心数)
num.network.threads=3
# IO线程数(建议为CPU核心数的50%)
num.io.threads=8
# 日志保留策略(保留7天或1GB,按需调整)
log.retention.hours=168
log.retention.bytes=1073741824
在每台Broker节点上执行:
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties &
(添加&表示后台运行,建议使用systemctl管理服务以实现开机自启)
创建Topic时指定副本因子≥3(确保数据冗余),分区数根据并发需求设置(如每分区支持1MB/s吞吐量,则分区数=预期总吞吐量/1MB/s):
/opt/kafka/bin/kafka-topics.sh --create \
--topic my_topic \
--bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092 \
--replication-factor 3 \
--partitions 3
通过min.insync.replicas参数控制写入时的最小同步副本数(如设置为2,需至少2个副本同步成功才返回成功响应),避免因单副本故障导致数据丢失:
# 在server.properties中设置
min.insync.replicas=2
kill -9 <kafka_pid>),观察集群状态:/opt/kafka/bin/kafka-topics.sh --describe --topic my_topic --bootstrap-server kafka1:9092
正常情况下,ISR列表会自动调整,剩余副本继续提供服务。kafka-topics.sh(查看Topic状态)、kafka-consumer-groups.sh(查看消费者组偏移量)、kafka-broker-api-versions.sh(查看Broker API版本)等命令监控集群。log4j.properties),避免日志文件过大占用磁盘空间。lz4),减少网络传输和存储开销:compression.type=lz4 # 在server.properties或Topic配置中设置
log.dirs),可使用rsync或专业备份工具。log.dirs,启动Broker即可同步数据)。配置Kafka使用SSL/TLS加密Broker与客户端、Broker与Broker之间的通信,防止数据泄露。需生成证书并在server.properties中配置:
listeners=SSL://:9093
ssl.keystore.location=/path/to/keystore.jks
ssl.keystore.password=your_password
ssl.truststore.location=/path/to/truststore.jks
ssl.truststore.password=your_password
启用SASL(如SCRAM或PLAIN)认证,限制客户端访问权限。需在server.properties中配置:
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
通过以上策略,可在Debian系统上搭建一个高可用、高性能、安全的Kafka集群,满足大规模数据处理需求。