kafka删除/创建 topic报错,如何解决

测试环境服务器上面删除topic失败

sh kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --delete --topic yidun_image_human_result

错误截图

然后查看server.log日志后看到expiring session...错误。可知是会话参数配置有问题

同时查看9092的端口查看也没了。

到此可以基本判断kafka服务挂掉了。是因为会话参数配置的有问题。此时我们先配置server.properties文件。修改添加或者修改这个参数的值

zookeeper.session.timeout.ms 是 Kafka 依赖 ZooKeeper 的核心参数,直接影响集群的稳定性、故障恢复速度和元数据一致性

 ​这个参数与 ZooKeeper 的 tickTime 关联
ZooKeeper 的 tickTime(基础时间单位,如 2000ms)决定了会话超时计算的粒度。
​公式:session.timeout.ms 必须是 tickTime 的整数倍,且需在 ZooKeeper 的 minSessionTimeout 和 maxSessionTimeout 范围内。
​示例:若 ZooKeeper 的 tickTime=2000ms,则 session.timeout.ms 可设置为 4000ms(2 倍 tickTime)至 40000ms(20 倍 tickTime)。

zookeeper.session.timeout.ms=30000

核心作用:

​会话心跳机制
临时节点生命周期管
用于检测 ZooKeeper 服务端异常或网络中断。

修改完后重启kafka服务

# 以守护进程模式启动(后台运行)
./kafka-server-start.sh -daemon ../config/server.properties

然后查看日志,如下输出说明没问题了

然后查看9092端口监听信息,会输出相关的服务信息即为正常

netstat -ant | grep 9092 

最后再次执行创建topic的命令即可成功创建topic。

sh kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --create --partitions 12 --replication-factor 1 --topic yidun_image_human_result

然后使用命令检查创建的topic是否存在即可

# 检查 Topic 状态
./kafka-topics.sh --bootstrap-server localhost:9092 --describe

本次处理到此就结束了

### Kafka 删除主题时遇到的错误及解决方案 在使用 Kafka 删除主题时,可能会遇到多种错误。以下是常见的错误及其解决方法: #### 1. **主题删除标记未生效** 当使用 `kafka-topics.sh` 脚本删除主题时,Kafka 并不会立即删除主题,而是通过在 ZooKeeper 的 `/admin/delete_topics` 路径下创建一个与待删除主题同名的节点来标记该主题为待删除状态[^1]。真正的删除动作由 Kafka 的控制器负责完成。如果主题未被成功删除,可能是由于以下原因: - 控制器未正常工作。 - 主题配置中禁用了自动删除功能。 **解决方法:** - 确保 Kafka 配置文件中启用了自动删除功能,设置 `delete.topic.enable=true`[^2]。 - 检查控制器是否正常运行,可通过日志确认控制器是否接收到删除请求。 #### 2. **Kafka 异常退出** 在删除主题的过程中,如果 Kafka 或 ZooKeeper 报错并异常退出,可能的原因包括: - 数据目录或日志文件损坏。 - 文件句柄资源不足。 - 权限问题导致无法访问数据目录。 **解决方法:** - 清理 Kafka 和 ZooKeeper 的数据目录及日志文件。具体操作如下: - 关闭 Kafka 和 ZooKeeper。 - 删除 ZooKeeper 的日志目录(参考 `$KAFKA_HOME\config\zookeeper.properties` 中的 `dataDir` 配置)[^5]。 - 删除 Kafka 的数据目录(参考 `$KAFKA_HOME\config\server.properties` 中的 `log.dirs` 配置)[^5]。 - 重启 ZooKeeper 和 Kafka。 - 如果删除后仍然报错,检查是否有权限问题(如 `java.nio.file.AccessDeniedException`),确保 Kafka 和 ZooKeeper 进程有足够的权限访问相关目录。 #### 3. **Broker ID 改变导致的问题** 如果在集群环境中重新启动 Kafka 节点时,`broker.id` 发生了变化,可能会导致 Kafka 无法正确识别节点身份,从而引发一系列错误[^4]。 **解决方法:** - 确保每次启动 Kafka 时,`broker.id` 保持一致。 - 如果 `broker.id` 已经改变,需要关闭 Kafka 和 ZooKeeper,并清理 Kafka 的数据和日志文件后重新启动。 #### 4. **Leader Broker 异常退出** 作为领导者的 Kafka Broker 在删除主题过程中异常退出,可能会导致后续操作失败[^3]。 **解决方法:** - 在删除主题前,备份 Kafka 和 ZooKeeper 的日志文件。 - 如果领导者 Broker 异常退出,尝试重新选举领导者或手动修复日志文件。 #### 示例代码:清理 Kafka 和 ZooKeeper 数据目录 ```bash # 关闭 Kafka 和 ZooKeeper $KAFKA_HOME/bin/kafka-server-stop.sh $KAFKA_HOME/bin/zookeeper-server-stop.sh # 删除 ZooKeeper 数据目录 rm -rf /path/to/zookeeper/data/* # 删除 Kafka 数据目录 rm -rf /path/to/kafka/logs/* # 启动 ZooKeeper 和 Kafka $KAFKA_HOME/bin/zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties $KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默的八哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值