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

相关推荐
霸道流氓气质4 分钟前
分布式锁与事务配合:为什么锁要在事务提交后释放
分布式
muqsen4 小时前
Java 分布式相关面试题总结
java·开发语言·分布式
Devin~Y5 小时前
大厂Java面试实录:Spring Boot微服务 + Redis缓存 + Kafka消息队列 + Prometheus链路追踪 + RAG向量检索
java·spring boot·redis·spring cloud·kafka·rabbitmq·spring mvc
phltxy5 小时前
RabbitMQ 入门与安装
分布式·rabbitmq
阿坤带你走近大数据5 小时前
Kafka的基本概念,基本用法及常见使用场景
分布式·kafka
逻极5 小时前
RabbitMQ 从入门到精通:构建高可用、高性能的消息中间件系统
分布式·rabbitmq·消息中间件
Lyyaoo.5 小时前
Kafka快速入门
分布式·kafka
懂AI的老郑6 小时前
OpenClaw:高效管理分布式Agent开发团队
分布式·ai编程
来自星星的谢广坤6 小时前
OpenClaw做分布式合适吗?
分布式·openclaw
元拓数智16 小时前
智能分析落地卡壳?先补好「数据关系+语义治理」这层技术基建
大数据·分布式·ai·spark·数据关系·语义治理