[user@kafka.apache.org]Errors after reboot on single node setup

本文描述了一个Kafka用户在单节点设置中遇到的问题:重启后出现冲突错误。通过一系列步骤重现了该问题,并在Apache Jira上进行了报告。

这个是产生:

http://blog.youkuaiyun.com/wang_zhenwei/article/details/49681859 ([KAFKA-1724]Errors after reboot in single node setup)

的过程,

一个Kafka的使用者在使用过程中遇到问题:

原文地址:

http://comments.gmane.org/gmane.comp.apache.kafka.user/3902 (Errors after reboot on single node setup)


问:

Hi,

First of all, I am new to Kafka and more of a user than a developer. I will
try to clarify things as much as possible though.
我是一个Kafka的使用者,水平还打不到开发者的地步。我想尽量多弄明白一些事情。
We are using Kafka as a message system for our apps and works nicely in our
SaaS cluster.
I am trying to make the apps also work on a single node for demo purposes.
I set up Zookeeper, Kafka and our apps on a node and things were ok until
rebooting the node. After that I see the following messages in Kafka log:
我们使用Kafka作为一个消息系统,为我们SaaS集群中的应用和工作服务。刚开始,一切运行正常,直到我重启节点,发现Kafka中报了一下错误:
[2014-10-22 16:37:22,206] INFO [Controller 0]: Controller starting up
(kafka.controller.KafkaController)
[2014-10-22 16:37:22,419] INFO [Controller 0]: Controller startup complete
(kafka.controller.KafkaController)
[2014-10-22 16:37:22,554] INFO conflict in /brokers/ids/0 data:
{"jmx_port":-1,"timestamp":"1413995842465","host":"ip-10-91-142-54.eu-west-1.compute.internal","version":1,"port":9092}
stored data:
{"jmx_port":-1,"timestamp":"1413994171579","host":"ip-10-91-142-54.eu-west-1.compute.internal","version":1,"port":9092}
(kafka.utils.ZkUtils$)
[2014-10-22 16:37:22,736] INFO I wrote this conflicted ephemeral node
[{"jmx_port":-1,"timestamp":"1413995842465","host":"ip-10-91-142-54.eu-west-1.compute.internal","version":1,"port":9092}]
at /brokers/ids/0 a while back in a different session, hence I will backoff
for this node to be deleted by Zookeeper and retry (kafka.utils.ZkUtils$)
[2014-10-22 16:37:25,010] ERROR Error handling event ZkEvent[Data of
/controller changed sent to
kafka.server.ZookeeperLeaderElector$LeaderChangeListener <at> a6af882]
(org.I0Itec.zkclient.ZkEventThread)
java.lang.IllegalStateException: Kafka scheduler has not been started
        at

答:

Can you provide steps to reproduce this? I'm not sure I understand how you
run into this. It does look like a bug.
怎样产生这些问题的,我不确定你怎么做到的,它看起来像是个bug。

问:

This can reproduced with trunk.

start zookeeper
start kafka-broker
create topic or start a producer writing to a topic
stop zookeeper
stop kafka-broker( kafka broker shutdown goes into  WARN Session
0x14938d9dc010001 for server null, unexpected error, closing socket
connection and attempting reconn
ect (org.apache.zookeeper.ClientCnxn)
java.net.ConnectException: Connection refused)
kill -9 kafka-broker
restart zookeeper and than kafka-broker leads into the the error posted
by Ciprian.

Ciprian,
      Can you open a jira for this.

Thanks,
Harsha
过程如下:

1. 启动Zookeeper

2. 创建一个kafka-broker

3. 创建一个topic和给这个topic写数据的producer

4. 停止Zookeeper

5. 停止kafka-broker(Kafka broker关闭,进入WARN Session 0x14938d9dc010001,报错,关闭socket连接,视图重新连接,

(org.apache.zookeeper.ClientCnxn) java.net.ConnectException: Connection refused)

6. kill -9 kafka-broker,使用kill命令关闭kafka-broker

7. 重启zookeeper,kafka-broker出现了以上的错误。


答:

Thank you for the *very* quick replies Neha, Harsha. I opened a Jira for
this issue:
https://issues.apache.org/jira/browse/KAFKA-1724

Ciprian
--
Performance Monitoring * Log Analytics * Search Analytics
Solr & Elasticsearch Support * http://sematext.com/
非常感谢你的快速护肤,我在官网开了一个报错文章,用来跟踪这个错误。地址见上面。


附录:

一个讨论Kafka的论坛:

http://blog.gmane.org/gmane.comp.apache.kafka.user


`org.apache.kafka.connect.errors.ConnectException` 是 **Kafka Connect 框架中的核心异常类**,它定义在 Kafka 的 `connect-api` 模块中。 --- ## ✅ 它属于哪个 Maven 包? ### 🔹 完整坐标(Maven 依赖): ```xml <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-connect-api</artifactId> <version>2.8.0</version> <!-- 版本需与 Kafka 兼容 --> </dependency> ``` > ⚠️ 注意:这个 JAR 只能在 Kafka 的依赖仓库中找到,通常不会单独发布到中央仓库(部分版本有镜像) --- ## 📦 在运行时,它位于哪个 JAR 文件中? 取决于你的环境配置。以下是常见情况: | 环境 | 包含该类的 JAR | |------|----------------| | 原生 Kafka Connect 用户 | `kafka-connect-api-{version}.jar` | | Debezium 用户 | `debezium-embedded-{version}.jar` 或 `debezium-core-{version}.jar` | | Flink CDC 用户(3.0+) | `flink-connector-mysql-cdc-3.x.jar`(经过 **shading** 处理) | | Confluent Platform | `connect-api.jar` | --- ## 🔍 如何验证某个 JAR 是否包含这个类? 使用命令行检查: ```bash jar -tvf some-jar-file.jar | grep "org/apache/kafka/connect/errors/ConnectException.class" ``` ### 示例输出: ``` 1234 Mon Apr 05 10:20:30 CST 2021 org/apache/kafka/connect/errors/ConnectException.class ``` 如果看到这一行 → 表示该 JAR 提供了这个类。 --- ## ⚠️ 常见问题:为什么明明有这个类还是报错? ### ❌ 场景一:JAR 存在但未被加载 - 把 JAR 放错了目录(比如没放进 `$FLINK_HOME/lib`) - 使用了插件机制,ClassLoader 隔离导致找不到 ✅ 解决方案:确保 JAR 在 Flink 的 `lib/` 目录下,并重启 SQL Client --- ### ❌ 场景二:类被 Shading(重命名),路径变了 Flink 为了避免依赖冲突,会对 Kafka 类进行 **Shading**,例如: | 原始类名 | Shaded 后的类名 | |--------|----------------| | `org.apache.kafka.connect.errors.ConnectException` | `org.apache.flink.shaded.kafka5.org.apache.kafka.connect.errors.ConnectException` | 📌 此时你在代码里写的 `new ConnectException()` 必须通过反射或桥接调用 shaded 路径,否则会抛出 `ClassNotFoundException` 👉 这就是为什么你加了 `debezium-embedded.jar` 还是失败 —— 因为 Flink 内部期望的是 shaded 版本! --- ## ✅ 推荐解决方案总结 | 方案 | 描述 | |------|------| | ✅ 使用 `flink-connector-mysql-cdc-3.0.1.jar` 或更高版本 | 自带 shading,无需额外添加任何 JAR,开箱即用 | | ✅ 手动添加 `debezium-embedded-1.9.7.Final.jar` | 仅适用于 `mysql-cdc-2.x` 等不带依赖的轻量版 | | ❌ 添加原始 `kafka-connect-api.jar` | 不推荐,容易引发版本冲突 | --- ## 💡 小知识:为什么叫 “kafka5” in shading? 在 Flink CDC 中你会看到: ``` org.apache.flink.shaded.kafka5.org.apache.kafka.connect... ``` 这里的 `kafka5` 是一个内部标识: | 名称 | 含义 | |------|------| | `kafka5` | 表示这是基于 Kafka 2.5+ API 构建的 shaded 模块(历史命名) | | `kafka6`, `kafka7` | 新版本用于区分不同 Kafka 大版本依赖 | 这不是 Kafka 第 5 代,而是 Flink 内部的 shading 分支编号。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值