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

相关推荐
yumgpkpm5 小时前
(简略)AI 大模型 手机的“简单替换陷阱”与Hadoop、Cloudera CDP 7大数据底座的关系探析
人工智能·hive·zookeeper·flink·spark·kafka·开源
yumgpkpm5 小时前
Cloudera CDP 7.3下载地址、方式,开源适配 CMP 7.3(或类 CDP 的 CMP 7.13 平台,如华为鲲鹏 ARM 版)值得推荐
大数据·hive·hadoop·分布式·华为·开源·cloudera
Chasing__Dreams5 小时前
kafka--基础知识点--6.3--leader epoch机制
分布式·kafka
L、2185 小时前
Flutter 与 OpenHarmony 深度集成:构建分布式多端协同应用
分布式·flutter·wpf
Light6014 小时前
点燃变革:领码SPARK融合平台如何重塑OA,开启企业智慧协同新纪元?
大数据·分布式·spark
写代码的【黑咖啡】15 小时前
如何在大数据数仓中搭建数据集市
大数据·分布式·spark
SoleMotive.16 小时前
kafka选型
分布式·kafka
小二·18 小时前
MyBatis基础入门《十五》分布式事务实战:Seata + MyBatis 实现跨服务数据一致性
分布式·wpf·mybatis
feathered-feathered20 小时前
Redis基础知识+RDB+AOF(面试)
java·数据库·redis·分布式·后端·中间件·面试