Kafka单机搭建(一)

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用户)更为合适。

相关推荐
禁默1 小时前
打破集群通信“内存墙”:手把手教你用 CANN SHMEM 重构 AIGC 分布式算子
分布式·重构·aigc
惊讶的猫2 小时前
rabbitmq初步介绍
分布式·rabbitmq
小镇敲码人3 小时前
华为CANN框架中HCCL仓库的全面解析:分布式通信的引擎
分布式·华为
User_芊芊君子3 小时前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
酷酷的崽7983 小时前
CANN 开源生态解析(四):`cann-dist-train` —— 构建高效可扩展的分布式训练引擎
分布式·开源
惊讶的猫4 小时前
AMQP 与 RabbitMQ 四大模型
分布式·rabbitmq
灰子学技术4 小时前
istio从0到1:如何解决分布式配置同步问题
分布式·云原生·istio
小马爱打代码5 小时前
ZooKeeper:入门实战
分布式·zookeeper·云原生
永远都不秃头的程序员(互关)6 小时前
CANN赋能AIGC分布式训练:硬核通信,加速大模型智能生成新纪元
分布式·aigc
杜子不疼.7 小时前
CANN集合通信库HCCL的大规模分布式训练通信优化与拓扑感知实践
分布式