Kafka 是一个分布式流处理平台,常用于构建实时数据管道和流式应用。下面是在Linux上搭建单机Apache Kafka 的基本步骤。
一、前置条件
- Java 8 或 Java 11 (推荐使用 LTS 版本),没安装,见 附:JDK8下载与环境配置脚本
- ZooKeeper(Kafka 2.8 之前版本依赖 ZooKeeper;从 Kafka 3.3 开始支持 KRaft 模式,可不依赖 ZooKeeper)
本文以 Kafka 3.6+ + KRaft 模式为例(无需 ZooKeeper),适用于新版本用户
二、下载并解压 Kafka
bash
# 下载 Kafka(以 3.7.0 为例)
wget https://archive.apache.org/dist/kafka/3.7.0/kafka_2.13-3.7.0.tgz
# 解压
tar -xzf kafka_2.13-3.7.0.tgz
cd kafka_2.13-3.7.0
三、使用 KRaft 模式启动 Kafka
1. 生成 Cluster ID(仅首次需要)
bash
bin/kafka-storage.sh random-uuid
输出类似:4GvB6qJjQXmWzVlU9yYdHA,记下这个 ID。
2. 格式化日志目录(首次)
bash
bin/kafka-storage.sh format -t <your-uuid> -c config/kraft/server.properties
例如:McXRT6mJTUCopQbQdffdQg
bash
bin/kafka-storage.sh format -t 4GvB6qJjQXmWzVlU9yYdHA -c config/kraft/server.properties
3. 启动 Kafka 服务
bash
bin/kafka-server-start.sh config/kraft/server.properties
默认监听端口:9092

四、测试 Kafka 功能
1. 创建 Topic
bash
bin/kafka-topics.sh --create --topic test-topic \
--bootstrap-server localhost:9092 \
--partitions 1 \
--replication-factor 1
注意:KRaft 模式下
--replication-factor实际由内部控制器管理,设为 1 即可用于测试。
2. 启动 Producer(发送消息)
bash
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
输入任意文本,按回车发送。
3. 启动 Consumer(接收消息)
另开终端:
bash
bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
应能看到 Producer 发送的消息。


五、配置外部访问
编辑 config/kraft/server.properties:
vi config/kraft/server.properties
修改内容:
properties
# 监听地址(允许外部连接)
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://<你的服务器公网IP>:9092
注意防火墙和安全组是否开放 9092 端口。

六 、启用 SASL/PLAIN 认证
1. 创建 JAAS 配置文件
创建目录
mkdir -p config/security
创建 kafka_server_jaas.conf
cat > config/security/kafka_server_jaas.conf <<EOF
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="StrongPassword123!"
user_admin="StrongPassword123!"
user_producer="StrongPassword456!"
user_consumer="StrongPassword789!";
};
EOF
| 用户名(username) | 密码(password) | 用途建议 |
|---|---|---|
admin |
StrongPassword123! |
管理员(全权限) |
producer |
StrongPassword456! |
仅用于生产消息 |
consumer |
StrongPassword789! |
仅用于消费消息 |
格式:user_<用户名>=<密码>,可定义多个用户。

2. 修改 server.properties
vi config/kraft/server.properties
修改内容如下:
#启用 SASL/PLAIN
listeners=SASL_PLAINTEXT://0.0.0.0:9092,CONTROLLER://:9093
inter.broker.listener.name=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://你的内网IP或域名:9092
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

3. 启动时指定 JAAS 文件
export KAFKA_OPTS="-Djava.security.auth.login.config=/root/kafka_2.13-3.7.0/config/security/kafka_server_jaas.conf"
bin/kafka-server-start.sh config/kraft/server.properties
4. 客户端连接示例(Java略过)
props.put("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"StrongPassword123!\";");
props.put("security.protocol", "SASL_PLAINTEXT");
props.put("sasl.mechanism", "PLAIN");
5. 客户端展示

优点:简单、无需证书
缺点:密码明文传输(仅限内网使用!如需公网,请用 SSL)
七、常用命令
| 功能 | 命令 |
|---|---|
| 查看 Topic 列表 | bin/kafka-topics.sh --list --bootstrap-server localhost:9092 |
| 删除 Topic | bin/kafka-topics.sh --delete --topic test-topic --bootstrap-server localhost:9092 |
| 查看 Topic 详情 | bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server localhost:9092 |
附:JDK8下载与环境配置脚本
vi install-jdk8.sh
内容如下:
#!/bin/bash
echo "[INFO] 开始安装 OpenJDK 8 (java-1.8.0-openjdk-devel)..."
sudo yum install -y java-1.8.0-openjdk-devel
if [ $? -ne 0 ]; then
echo "[ERROR] JDK 安装失败,请检查网络或 yum 源。"
exit 1
fi
echo "[INFO] 获取 Java 安装路径..."
JAVA_PATH=$(readlink -f $(which java))
if [ -z "$JAVA_PATH" ]; then
echo "[ERROR] 无法找到 java 命令,请确认安装成功。"
exit 1
fi
# 推导 JAVA_HOME(向上两级目录)
JAVA_HOME=$(dirname $(dirname "$JAVA_PATH"))
echo "[INFO] 检测到 JAVA_HOME: $JAVA_HOME"
# 检查 /etc/profile 是否已包含 JAVA_HOME,避免重复
if grep -q "export JAVA_HOME=" /etc/profile; then
echo "[WARN] /etc/profile 中已存在 JAVA_HOME,跳过写入。"
else
echo "[INFO] 将 JAVA_HOME 写入 /etc/profile..."
echo "export JAVA_HOME=$JAVA_HOME" | sudo tee -a /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile
fi
# 重新加载环境变量
source /etc/profile
# 验证配置
echo ""
echo "[INFO] 验证安装结果:"
echo "JAVA_HOME = $JAVA_HOME"
java -version
javac -version
echo ""
echo "[SUCCESS] OpenJDK 8 安装与环境配置完成!"
运行
sudo chmod +x install-jdk8.sh
sudo ./install-jdk8.sh
生产环境改成SASL_SSL + SCRAM-SHA-256 + SSL 加密或网络层防护(安全组或防火墙限制特定ip访问,创建专属用户,不要使用root用户)更为合适。