一、引言
Apache Kafka是一个分布式流处理平台,广泛应用于日志收集、实时分析等场景。对于开发测试或小型生产环境,单机版Kafka因其部署简单、资源占用低而备受青睐。然而,单机部署不意味着可以忽视安全性。本文将详细介绍如何在单机环境下部署Kafka,并配置SSL/SASL加密,确保数据传输的安全。
二、环境准备
1. 硬件与软件要求
- 硬件:至少4GB内存、双核CPU、足够磁盘空间(视数据量而定)。
- 软件:Java 8或更高版本、Kafka二进制包(如kafka_2.13-3.6.0.tgz)、Zookeeper(Kafka依赖,但3.3.0+版本支持KIP-500,可省略独立Zookeeper)。
2. 下载与解压
从Apache Kafka官网下载最新稳定版,解压至指定目录:
tar -xzf kafka_2.13-3.6.0.tgzcd kafka_2.13-3.6.0
三、单机版Kafka基础部署
1. 配置Zookeeper(如未启用KIP-500)
编辑config/zookeeper.properties,修改数据目录和端口(默认2181):
dataDir=/tmp/zookeeperclientPort=2181
启动Zookeeper:
bin/zookeeper-server-start.sh config/zookeeper.properties
2. 配置Kafka
编辑config/server.properties,关键配置如下:
# 监听地址和端口listeners=PLAINTEXT://:9092# 日志存储路径log.dirs=/tmp/kafka-logs# Zookeeper连接(如未启用KIP-500)zookeeper.connect=localhost:2181# 唯一broker IDbroker.id=0
启动Kafka:
bin/kafka-server-start.sh config/server.properties
3. 验证部署
创建测试Topic:
bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
发送和接收消息验证:
bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092
四、Kafka安全配置:加密码
1. SSL加密配置
生成密钥和证书
使用OpenSSL生成CA证书、服务器证书和密钥:
# 生成CA私钥openssl genrsa -out ca-key.pem 2048# 生成CA证书openssl req -new -x509 -key ca-key.pem -out ca-cert.pem -days 365 -subj "/CN=Kafka-CA"# 生成服务器私钥openssl genrsa -out server-key.pem 2048# 生成证书签名请求(CSR)openssl req -new -key server-key.pem -out server-csr.pem -subj "/CN=localhost"# 生成服务器证书openssl x509 -req -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -in server-csr.pem -out server-cert.pem -days 365
配置Kafka使用SSL
修改server.properties:
# 启用SSL监听listeners=SSL://:9093# SSL配置ssl.keystore.location=/path/to/server.keystore.jksssl.keystore.password=yourpasswordssl.key.password=yourpasswordssl.truststore.location=/path/to/server.truststore.jksssl.truststore.password=yourpassword# 可选:客户端认证ssl.client.auth=required
将PEM格式证书转换为JKS格式(使用keytool):
# 创建keystore并导入私钥和证书openssl pkcs12 -export -in server-cert.pem -inkey server-key.pem -out server.p12 -name localhost -CAfile ca-cert.pem -caname rootkeytool -importkeystore -destkeystore server.keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -alias localhost# 创建truststore并导入CA证书keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert.pem
客户端配置
生产者/消费者需配置SSL:
bin/kafka-console-producer.sh --bootstrap-server localhost:9093 --topic test \--producer.config client-ssl.propertiesbin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic test \--from-beginning --consumer.config client-ssl.properties
client-ssl.properties示例:
security.protocol=SSLssl.truststore.location=/path/to/client.truststore.jksssl.truststore.password=clientpassssl.keystore.location=/path/to/client.keystore.jksssl.keystore.password=clientpass
2. SASL认证配置
启用SASL_PLAINTEXT或SASL_SSL
修改server.properties:
# 使用SASL_SSLlisteners=SASL_SSL://:9094security.inter.broker.protocol=SASL_SSLsasl.enabled.mechanisms=SCRAM-SHA-256sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
创建JAAS配置文件
kafka_server_jaas.conf:
KafkaServer {org.apache.kafka.common.security.scram.ScramLoginModule requiredusername="admin"password="admin-secret"user_admin="admin-secret"user_client="client-secret";};
启动时指定JAAS文件:
export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"bin/kafka-server-start.sh config/server.properties
客户端配置
client-sasl.properties:
security.protocol=SASL_SSLsasl.mechanism=SCRAM-SHA-256sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \username="client" \password="client-secret";
五、最佳实践与注意事项
- 证书管理:定期更换证书,避免使用自签名证书在生产环境。
- 最小权限原则:SASL用户仅授予必要权限。
- 日志监控:启用Kafka日志审计,记录异常登录和操作。
- 防火墙规则:限制Kafka端口访问,仅允许可信IP。
- 备份与恢复:定期备份配置文件和证书,确保可恢复性。
六、结论
单机版Kafka部署结合SSL/SASL加密,能够在简化部署的同时保障数据安全。通过本文的步骤,读者可以快速搭建一个安全的Kafka环境,适用于开发测试及小型生产场景。未来,随着业务扩展,可进一步考虑集群部署和更复杂的权限控制。