Ubuntu部署kafka集群

Apache Kafka (KRaft 集群)

Apache Kafka 是一个基于 TCP 的分布式流处理平台,提供高吞吐量、低延迟的消息传递和处理能力,用于构建实时数据管道和流应用程序。其底层通信依赖于 TCP Socket,但 Kafka 封装了许多高级特性,使其更加适合构建复杂的数据管道和流处理系统。

Kafka 在2.8版本之后,移除了对Zookeeper的依赖,将依赖于ZooKeeper的控制器改造成了基于Kafka Raft的Quorm控制器,因此可以在不使用ZooKeeper的情况下实现集群,本文讲解 Kafka KRaft 模式集群搭建。

本文使用三台服务器部署集群,192.168.3.191192.168.3.192192.168.3.193

  

kafka部署(Ubuntu)

三台服务器都需进行部署

更新包列表和安装依赖

Kafka依赖于Java,因此首先需要安装Java环境。

sudo apt update
sudo apt install openjdk-11-jdk -y

开放端口

kafka 需要开放 9092 端口和 9093 端口,3台机器上都需开放 9092 和 9093 端口。

  • 开放9092 端口
sudo firewall-cmd --zone=public --add-port=9092/tcp --permanent
  • 开放9093 端口
sudo firewall-cmd --zone=public --add-port
<think>嗯,用户之前遇到了配置文件的问题,现在修改之后又出现了新的错误。这次的错误信息是关于文件操作的问题,具体是Java的FileSystemException,提示另一个程序正在使用文件,导致无法访问。我需要仔细分析这个问题,看看可能的原因和解决方案。 首先,错误信息显示在尝试将.timeindex.cleaned文件重命名为.timeindex.swap时失败,因为文件被另一个程序占用。这可能发生在Kafka清理或管理日志段的时候。常见的原因包括文件被其他进程锁定,或者Kafka自身没有正确释放文件句柄。 用户之前修改了配置,但可能没有正确关闭Kafka,导致残留的进程仍然占用文件。另外,Windows系统对文件锁定的管理比较严格,有时候即使程序退出,文件句柄可能没有立即释放。 接下来,我应该考虑可能的解决步骤。首先,确保Kafka完全停止,检查是否有Java进程残留,并强制终止它们。然后,检查文件是否真的被其他程序占用,比如防病毒软件或备份工具。此外,文件权限问题也可能导致无法访问,需要确认用户有足够的权限操作该目录。 另外,日志目录的路径是否正确,以及Kafka配置中是否有指向错误的位置。还有可能是磁盘空间不足,或者文件系统错误,需要检查磁盘状态。如果是Kafka的bug,可能需要升级版本或应用补丁。 用户可能需要手动删除.swap文件,并重新启动Kafka。如果问题持续,可以尝试调整Kafka的配置,比如减少并发操作或调整日志清理的间隔,以减少文件锁冲突的可能性。此外,建议用户检查是否有其他应用程序在访问Kafka的数据目录,暂时禁用防病毒软件进行测试。 需要一步步引导用户检查这些可能性,并提供具体的命令或操作步骤,比如使用资源监视器查找占用文件的进程,如何终止进程,如何修改配置文件等。同时提醒用户操作前备份数据,避免数据丢失。</think>--- ### 错误原因分析 日志关键错误信息: ```java java.nio.file.FileSystemException: D:\softInstall\kafka\tmp\...\00000000000000000000.timeindex.cleaned -> ...timeindex.swap: 另一个程序正在使用此文件,进程无法访问。 ``` 此错误表示 Kafka 在尝试 **重命名/清理日志文件** 时,文件被其他进程锁定。常见原因包括: 1. **Kafka 未完全关闭**:残留进程仍占用文件句柄 2. **防病毒软件/备份工具**:实时扫描锁定了文件 3. **文件权限问题**:Windows 用户权限不足 4. **磁盘或文件系统异常**:文件损坏或磁盘空间不足 --- ### 分步解决方案 #### **第一步:彻底关闭 Kafka 及相关进程** 1. 在 PowerShell 中执行以下命令强制终止 Java 进程: ```powershell taskkill /F /IM java.exe ``` > 注意:确保无其他关键 Java 应用运行 2. 检查 `tmp` 目录是否被锁定: ```powershell handle64.exe -accepteula D:\softInstall\kafka\tmp ``` > 需下载 [Sysinternals Suite](https://learn.microsoft.com/en-us/sysinternals/) 工具包获取 `handle64.exe` --- #### **第二步:排查外部进程干扰** 1. **暂时禁用防病毒软件**(如 360、火绒、Windows Defender) 2. 检查是否有 **文件同步工具**(如 OneDrive、坚果云)正在访问该目录 3. 使用 `资源监视器`(Win+R → `resmon`)搜索文件句柄占用: - 切换到 `CPU` 标签 → 在 `关联的句柄` 搜索栏输入 `00000000000000000000.timeindex` --- #### **第三步:修复文件权限与状态** 1. 删除残留的 `.swap` 文件(操作前建议备份): ```powershell Remove-Item D:\softInstall\kafka\tmp\kraft-combined-logs__consumer_offsets-42\*.swap -Force ``` 2. 授予当前用户完全控制权限: - 右键点击 `D:\softInstall\kafka\tmp` → 属性 → 安全 → 编辑 → 添加当前用户 → 勾选 `完全控制` --- #### **第四步:检查 Kafka 配置优化** 在 `server.properties` 中调整以下参数(避免频繁文件操作): ```properties # 减少日志段合并频率 log.cleaner.backoff.ms=15000 log.cleaner.dedupe.buffer.size=134217728 # 128MB # 禁用文件预分配(Windows 建议关闭) log.preallocate=false ``` --- ### 高级排查 如果问题仍然存在,尝试以下方法: | 方向 | 操作建议 | |-----------------------|------------------------------------------------------------------------| | **更换日志目录** | 修改 `log.dirs` 指向其他磁盘(如 `E:\kafka-logs`) | | **检查磁盘健康** | 运行 `chkdsk D: /f` 修复文件系统错误 | | **升级 Kafka 版本** | 确认使用的 Kafka 版本是否为最新稳定版(已知旧版本存在 Windows 文件锁 BUG) | | **切换 WSL2 环境** | 若条件允许,在 WSL2 (Ubuntu) 中运行 Kafka 避免 Windows 文件锁限制 | --- ### 操作验证 完成修复后,通过以下命令重启 Kafka: ```powershell # 清理旧日志(谨慎操作) Remove-Item D:\softInstall\kafka\tmp\kraft-combined-logs* -Recurse -Force # 启动服务(观察是否仍有文件锁错误) .\bin\windows\kafka-server-start.bat .\config\kraft\server.properties ``` 如果出现新的错误日志,请提供完整上下文以便进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值