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

相关推荐
岁岁种桃花儿16 分钟前
Kafka从入门到上天系列第三篇:基础架构推演+基础组件图形推演
分布式·kafka
qq_124987075311 小时前
基于Hadoop的信贷风险评估的数据可视化分析与预测系统的设计与实现(源码+论文+部署+安装)
大数据·人工智能·hadoop·分布式·信息可视化·毕业设计·计算机毕业设计
ask_baidu11 小时前
KafkaUtils
kafka·bigdata
洛豳枭薰13 小时前
消息队列关键问题描述
kafka·rabbitmq·rocketmq
lucky670714 小时前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
Coder_Boy_14 小时前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
袁煦丞 cpolar内网穿透实验室15 小时前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
岁岁种桃花儿15 小时前
CentOS7 彻底卸载所有JDK/JRE + 重新安装JDK8(实操完整版,解决kafka/jps报错)
java·开发语言·kafka
人间打气筒(Ada)15 小时前
GlusterFS实现KVM高可用及热迁移
分布式·虚拟化·kvm·高可用·glusterfs·热迁移