Kafka KRaft + SSL + SASL/PLAIN 部署文档

本文档介绍如何在 Windows 环境下部署 Kafka 4.x,使用 KRaft 模式、SSL 加密和 SASL/PLAIN 认证。stevensu1/kafka_2.13-4.0.0

1. 环境准备

  • JDK 17 或更高版本
  • Kafka 4.x 版本(本文档基于 kafka_2.13-4.0.0)

2. 目录结构

D:\kafka_2.13-4.0.0\
├── bin\windows\
├── config\
│   ├── server.properties
│   ├── ssl.properties
│   ├── jaas.conf
│   └── log4j2.properties
├── logs\
└── config\ssl\├── kafka.server.keystore.jks└── kafka.server.truststore.jks

3. 配置文件说明

3.1 server.properties

# 节点角色配置
process.roles=broker,controller
node.id=1# 监听器配置
listeners=PLAINTEXT://:9092,CONTROLLER://:9093,SSL://:9094,SASL_SSL://:9095
advertised.listeners=SSL://localhost:9094,SASL_SSL://localhost:9095
controller.listener.names=CONTROLLER
inter.broker.listener.name=SSL
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_SSL:SASL_SSL# 控制器配置
controller.quorum.voters=1@localhost:9093# 日志配置
log.dirs=D:/kafka_2.13-4.0.0/logs# 安全配置
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
allow.everyone.if.no.acl.found=true# SSL 配置
ssl.keystore.location=config/ssl/kafka.server.keystore.jks
ssl.keystore.password=kafka123
ssl.key.password=kafka123
ssl.truststore.location=config/ssl/kafka.server.truststore.jks
ssl.truststore.password=kafka123
ssl.client.auth=required
ssl.enabled.protocols=TLSv1.2,TLSv1.3
ssl.endpoint.identification.algorithm=HTTPS
ssl.secure.random.implementation=SHA1PRNG

3.2 ssl.properties

# SSL 配置
ssl.keystore.location=config/ssl/kafka.server.keystore.jks
ssl.keystore.password=kafka123
ssl.key.password=kafka123
ssl.truststore.location=config/ssl/kafka.server.truststore.jks
ssl.truststore.password=kafka123
ssl.client.auth=required
ssl.enabled.protocols=TLSv1.2,TLSv1.3
ssl.endpoint.identification.algorithm=HTTPS
ssl.secure.random.implementation=SHA1PRNG

3.3 jaas.conf

KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="admin"password="admin-secret"user_admin="admin-secret"user_alice="alice-secret";
};

3.4 log4j2.properties

status = INFO
name = KafkaConfig# 控制台输出
appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n# 文件输出
appender.kafka.type = RollingFile
appender.kafka.name = kafka
appender.kafka.fileName = ${sys:kafka.logs.dir}/server.log
appender.kafka.filePattern = ${sys:kafka.logs.dir}/server-%d{yyyy-MM-dd}-%i.log.gz
appender.kafka.layout.type = PatternLayout
appender.kafka.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
appender.kafka.policies.type = Policies
appender.kafka.policies.time.type = TimeBasedTriggeringPolicy
appender.kafka.policies.size.type = SizeBasedTriggeringPolicy
appender.kafka.policies.size.size = 100MB
appender.kafka.strategy.type = DefaultRolloverStrategy
appender.kafka.strategy.max = 10# 根日志配置
rootLogger.level = INFO
rootLogger.appenderRefs = console, kafka
rootLogger.appenderRef.console.ref = console
rootLogger.appenderRef.kafka.ref = kafka# Kafka 日志配置
logger.kafka.name = kafka
logger.kafka.level = INFO
logger.kafka.additivity = false
logger.kafka.appenderRefs = console, kafka
logger.kafka.appenderRef.console.ref = console
logger.kafka.appenderRef.kafka.ref = kafka

4. 部署步骤

4.1 初始步骤

1. 下载 Kafka 4.x 版本(本文档基于 kafka_2.13-4.0.0)

2. 解压到 D:\kafka_2.13-4.0.0

3. 创建必要的目录:

mkdir D:\kafka_2.13-4.0.0\logs
mkdir D:\kafka_2.13-4.0.0\config\ssl

4. 创建配置文件(server.properties、ssl.properties、jaas.conf、log4j2.properties)

4.2 生成 SSL 证书

运行以下命令生成 SSL 证书:

# 1. 生成 CA 私钥和证书
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365 -nodes -subj "/CN=kafka-ca"# 2. 生成服务器私钥
openssl genrsa -out kafka.server.key 2048# 3. 生成服务器证书签名请求(CSR)
openssl req -new -key kafka.server.key -out kafka.server.csr -subj "/CN=localhost"# 4. 使用 CA 证书签名服务器证书
openssl x509 -req -CA ca-cert -CAkey ca-key -in kafka.server.csr -out kafka.server.cert -days 365 -CAcreateserial# 5. 创建 JKS 格式的密钥库
keytool -import -alias ca -file ca-cert -keystore kafka.server.truststore.jks -storepass kafka123 -noprompt
keytool -import -alias server -file kafka.server.cert -keystore kafka.server.keystore.jks -storepass kafka123 -noprompt# 6. 将私钥导入密钥库
openssl pkcs12 -export -in kafka.server.cert -inkey kafka.server.key -out kafka.server.p12 -name server -password pass:kafka123
keytool -importkeystore -srckeystore kafka.server.p12 -srcstoretype PKCS12 -destkeystore kafka.server.keystore.jks -deststoretype JKS -srcstorepass kafka123 -deststorepass kafka123# 7. 移动证书文件到配置目录
move kafka.server.keystore.jks config\ssl\
move kafka.server.truststore.jks config\ssl\

4.3 格式化存储目录

在启动 Kafka 服务前,需要格式化存储目录,确保 meta.properties 正确生成:

bin\windows\kafka-storage.bat random-uuid
bin\windows\kafka-storage.bat format -t  -c config\server.properties

4.4 启动 Kafka 服务

运行以下命令启动 Kafka 服务:

start-kafka-kraft.bat

5. 客户端连接示例

5.1 Java 客户端配置

bootstrap.servers=localhost:9095
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";
ssl.truststore.location=你的truststore路径
ssl.truststore.password=kafka123

5.2 命令行工具配置

使用以下命令创建主题:

bin\windows\kafka-topics.bat --create --topic test-topic --bootstrap-server localhost:9095 --command-config config\client.properties

6. 常见问题

  • 问题: No `meta.properties` found in logs directory
    解决: 运行 kafka-storage.bat format 命令格式化存储目录。
  • 问题: ClassNotFoundException: kafka.security.authorizer.AclAuthorizer
    解决: 将 authorizer.class.name 修改为 org.apache.kafka.metadata.authorizer.StandardAuthorizer
  • 问题: Log4j 配置错误
    解决: 确保使用 Log4j2 配置文件,并在启动脚本中正确设置 KAFKA_LOG4J_OPTS

7. 参考链接

  • Kafka 安全文档
  • Log4j 迁移指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MQTT协议,EMQX部署,MQTTX安装学习

一、MQTT概述 1.什么是MQTT MQTT是一种基于“发布订阅“”模式的消息传输协议。 消息:设备和设备之间传输的数据,或者服务和服务之间要传输的数据。 协议:传输数据时所遵循的规范。 2.常见的通讯模式 (1)客户端-服…

Java Web 开发详细流程

🧭 一、项目立项与需求分析阶段(0%) 1.1 商业需求确认 与产品经理沟通核心业务目标 目标:构建一个图书管理系统用户:图书管理员、普通用户功能:登录、查看、增删改图书、权限控制、分页、搜索 1.2 输出文…

学习路之PHP--easyswoole_panel安装使用

学习路之PHP--easyswoole_panel安装使用 一、新建文件夹二、安装三、改配置地址四、访问 IP:Port 自动进入index.html页面 一、新建文件夹 /www/wwwroot/easyswoole_panel 及配置ftp 解压easyswoole_panel源码 https://github.com/easyswoole-panel/easyswoole_panel 二、安…

软件设计综合知识

software-design 软考中级-软件设计师-综合知识:计算机系统基础、操作系统、计算机网络与信息安全、程序语言基础、数据库基础、数据结构与算法、软件工程基础知识、标准与知识产权等。 —— 2025 年 3 月 5 日 甲辰年二月初六 惊蛰 目录 software-design1、计算机基…

海思 35XX MIPI读取YUV422

1.项目背景: 使用海思芯片,接收FPGA发送的MIPI数据,不需要ISP处理,YUV图像格式为YUV422。 2.移植MIPI驱动 修改IMX347的驱动远吗,将I2C读写的部分注释,其他的不用再做修改。 int imx347_slave_i2c_init(ot…

算力租赁革命:弹性模式如何重构数字时代的创新门槛​

一、算力革命:第四次工业革命的核心驱动力​ 在科技飞速发展的当下,我们正悄然迎来第四次工业革命。华为创始人任正非在一场程序设计竞赛中曾深刻指出,这场革命的基础便是大算力。随着 5G、人工智能、大数据、物联网等信息技术的迅猛发展&am…

改写自己的浏览器插件工具 myChromeTools

1. 起因, 目的: 前面我写过, 自己的一个浏览器插件小工具 最近又增加一个小功能,可以自动滚动页面,尤其是对于那些瀑布流加载的网页。最新的代码都在这里 2. 先看效果 3. 过程: 代码 1, 模拟鼠标自然滚动 // 处理滚动控制逻辑…

深度学习篇---OC-SORT简介

OC-SORT(Observation-Centric SORT)是一种以观测为中心的多目标跟踪算法,旨在解决传统 SORT 算法在目标遮挡、外观变化和复杂交互场景下关联准确性不足的问题。以下是其详细介绍: 核心创新点 以观测为中心的在线平滑&#xff08…

硬件工程师笔记——二极管Multisim电路仿真实验汇总

目录 1 二极管基础知识 1.1 工作原理 1.2 二极管的结构 1.3 PN结的形成 1.4 二极管的工作原理详解 正向偏置 反向偏置 multisim使用说明链接 2 二极管特性实验 2.1 二极管加正向电压 2.2 二极管加反向电压 2.3 二极管两端的电阻 2.4 交流电下二级管工作 2.5 二极…

vscode中让文件夹一直保持展开不折叠

vscode中让文件夹一直保持展开不折叠 问题 很多小伙伴使用vscode发现空文件夹会折叠显示, 让人看起来非常难受, 如下图 解决办法 首先打开设置->setting, 搜索compact Folders, 去掉勾选即可, 如下图所示 效果如下 看起来非常爽 ! ! !

设计模式学习笔记

设计模式 一:分类: 创建型模式 用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF(四人组)书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式 用于描述如何将…

Kaggle-Predict Calorie Expenditure-(回归+xgb+cat+lgb+模型融合+预测结果)

Predict Calorie Expenditure 题意: 给出每个人的基本信息,预测运动后的卡路里消耗值。 数据处理: 1.构造出人体机能、运动相关的特征值。 2.所有特征值进行从新组合,注意唯独爆炸 3.对连续信息分箱变成离散 建立模型&#x…

第十二篇:MySQL 分布式架构演进与云原生数据库探索

本篇聚焦 MySQL 在互联网架构演进过程中的角色变化,探讨其从单体向分布式、再向云原生架构转型的关键技术路径与实践建议。 一、传统单体架构下的 MySQL 应用模式 在早期项目中,MySQL 多用于中小型应用: 单节点部署; 水平扩展难…

JVM——回顾:JVM的起源、特性与系统构成

引入 在当今数字化时代,Java语言及其运行环境Java虚拟机(JVM)在软件开发领域占据着举足轻重的地位。从大型企业级应用到各类移动应用,JVM凭借其独特的特性和强大的功能,为开发者提供了高效且稳定的运行环境。 JVM的起…

大疆上云API+流媒体服务器部署实现直播功能

根据官网文档上云API,先将官方提供的Demo部署起来,后端和前端服务环境搭建请参考官方文档。因为官方文档没有对直播这块的环境搭建进行说明,所以下面主要对直播功能环境搭建做一个记录,仅供参考,如有不足之处&#xff…

计算机网络 HTTP篇常见面试题总结

HTTP各版本区别 HTTP 1.0 无状态、无连接:每次请求都需要建立新的 TCP,处理完后立即关闭,导致开销较大。队头阻塞:每个请求必须按照顺序依次处理,前面的请求未完成,后面的请求只能等待,减低了…

目标检测:YOLO 模型详解

目录 一、YOLO(You Only Look Once)模型讲解 YOLOv1 YOLOv2 (YOLO9000) YOLOv3 YOLOv4 YOLOv5 YOLOv6 YOLOv7 YOLOv8 YOLOv9 YOLOv10 YOLOv11 YOLOv12 其他变体:PP-YOLO 二、YOLO 模型的 Backbone:Focus 结构 三、…

开源 FcDesigner 表单设计器组件事件详解

FcDesigner 是一款基于Vue的开源低代码可视化表单设计器工具,通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间。并广泛应用于在政务系统、OA系统、ERP系统、电商系统、流程管理等领域。 …

关于 smali:2. 从 Java 到 Smali 的映射

一、对照 Java 代码与 Smali 代码差异 1.1 方法调用差异:Java vs Smali Java 方法分类: 方法类型Java 示例Smali 指令特点说明静态方法Utils.print("hi")invoke-static没有 this 指针实例方法obj.show()invoke-virtual有 this,虚…

2025年05月29日Github流行趋势

项目名称:agenticSeek 项目地址url:https://github.com/Fosowl/agenticSeek项目语言:Python历史star数:11898今日star数:2379项目维护者:Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…