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 小时前
06-23-A-RabbitMQ生态集成详解
分布式·rabbitmq
m0_646429979 小时前
RabbitMQ 核心知识总结(生产实战版)
分布式·rabbitmq
DBA_G11 小时前
GBase 8c分布式数据库客户端工具 gsql
数据库·分布式
chunyublog11 小时前
Spark 词频统计练习
大数据·分布式·spark
ClouGence12 小时前
开源数据库管理工具 CloudDM 4.4.0 发布,新增 Kafka、SAP HANA 数据源
数据库·kafka
acrel712 小时前
高速公路分布式光伏并网电能质量与安全保护方案应用
分布式·安全
RobinXYuan12 小时前
【Kafka 源码手记】01 从消息队列到 Event Streaming
kafka·源码阅读
IT小小猪14 小时前
# Hadoop 3.3.6 完全分布式集群部署知识库
hadoop·分布式·eclipse
此时不提桶,更待何时14 小时前
06-24-B-RabbitMQ面试与生产事故实战
分布式·面试·rabbitmq
来福猿15 小时前
分布式锁 Redis 实现源码分析:SETNX、过期时间与可重入设计
数据库·redis·分布式