调试自定义Kafka连接器的简单有效方法是什么?

时间:2017-08-16 15:32:07

标签: java debugging apache-kafka slf4j apache-kafka-connect

我正在使用几个Kafka连接器,我在控制台输出中没有看到它们的创建/部署中的任何错误,但是我没有得到我正在寻找的结果(没有任何结果) ,期望的或其他的)。我根据Kafka的示例FileStream连接器制作了这些连接器,因此我的调试技术基于使用示例中使用的SLF4J Logger。我已经搜索了我认为会在控制台输出中生成的日志消息,但无济于事。我在错误的地方找这些消息吗?或者是否有更好的方法来调试这些连接器?

我为实现引用的SLF4J Logger的示例用法:

Kafka FileStreamSinkTask

Kafka FileStreamSourceTask

3 个答案:

答案 0 :(得分:16)

我会尝试以广泛的方式回答您的问题。一个简单的连接器开发方法如下:

  • 通过查看众多可公开使用的Kafka连接器之一来构建和构建连接器源代码(您可以在此处找到详细的列表:https://www.confluent.io/product/connectors/
  • https://www.confluent.io/download/
  • 下载最新的Confluent Open Source版本(> = 3.3.0)
  • 通过以下方式之一将您的连接器包提供给Kafka Connect:

    1. 将所有连接器jar文件(连接器jar和依赖jar,不包括Connect API jar)存储到文件系统中的某个位置,并通过将此位置添加到文件系统中来启用插件隔离 Connect工作人员属性中的plugin.path属性。例如,如果您的连接器jar存储在/opt/connectors/my-first-connector中,则会在工作人员的属性中设置plugin.path=/opt/connectors(见下文)。
    2. 将所有连接器jar文件存储在${CONFLUENT_HOME}/share/java下的文件夹中。例如:${CONFLUENT_HOME}/share/java/kafka-connect-my-first-connector。 (需要以kafka-connect-前缀开头,以便由启动脚本获取)。 $ CONFLUENT_HOME是您安装Confluent Platform的地方。
  • (可选)通过将${CONFLUENT_HOME}/etc/kafka/connect-log4j.properties中的Connect的日志级别更改为DEBUG甚至TRACE来增加日志记录。

  • 使用Confluent CLI启动所有服务,包括Kafka Connect。详情请见http://docs.confluent.io/current/connect/quickstart.html

    简要说明:confluent start

  

注意:CLI当前加载的Connect工作者属性文件为${CONFLUENT_HOME}/etc/schema-registry/connect-avro-distributed.properties。如果您选择启用类加载隔离,但是如果您需要更改Connect工作者的属性,则应该编辑该文件。

  • 运行Connect worker后,运行以下命令启动连接器:

    confluent load <connector_name> -d <connector_config.properties>

    confluent load <connector_name> -d <connector_config.json>

    连接器配置可以是java属性或JSON格式。

  • 运行 confluent log connect打开Connect工作人员的日志文件,或直接导航到运行日志和数据的位置

    cd "$( confluent current )"

  

注意:通过适当地设置环境变量CONFLUENT_CURRENT,在Confluent CLI会话期间更改日志和数据的存储位置。例如。鉴于/opt/confluent存在并且您要存储数据,请运行:

     

export CONFLUENT_CURRENT=/opt/confluent
  confluent current

  • 最后,要以交互方式调试连接器,可能的方法是在开始使用Confluent CLI连接之前应用以下内容:

    confluent stop connect
    export CONNECT_DEBUG=y; export DEBUG_SUSPEND_FLAG=y;
    confluent start connect

    然后连接调试器(例如远程连接到Connect工作器(默认端口:5005)。要在调试模式下停止运行连接,请在完成后运行:unset CONNECT_DEBUG; unset DEBUG_SUSPEND_FLAG;

    < / LI>

我希望上面的内容能让您的连接器开发更轻松,更有趣!

答案 1 :(得分:0)

我喜欢被接受的答案。一件事-环境变量对我不起作用...我正在使用融合的社区版本5.3.1 ...

这就是我所做的工作...

我从这里安装了汇合的cli: https://docs.confluent.io/current/cli/installing.html#tarball-installation

我使用命令confluent local start

汇合了

我使用命令ps -ef | grep connect

获得了连接应用程序的详细信息

我将结果命令复制到编辑器,并添加了arg(紧随Java之后):

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

然后我停止使用命令confluent local stop connect

进行连接

然后我用arg运行了connect命令

简短间歇---

  

vs代码开发由gang of four名誉的erich gamma领导,他还撰写了eclipse。 vs代码已成为一流的Java ide,请参见https://en.wikipedia.org/wiki/Erich_Gamma

---

接下来,我启动了vs代码,并打开了debezium oracle连接器文件夹(从此处克隆)https://github.com/debezium/debezium-incubator

然后我选择了Debug - Open Configurations

enter image description here

并输入突出显示的调试配置

enter image description here

然后运行调试器-它会达到您的断点!

enter image description here

connect命令应如下所示:

/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -Xms256M -Xmx2G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dkafka.logs.dir=/var/folders/yn/4k6t1qzn5kg3zwgbnf9qq_v40000gn/T/confluent.CYZjfRLm/connect/logs -Dlog4j.configuration=file:/Users/myuserid/confluent-5.3.1/bin/../etc/kafka/connect-log4j.properties -cp /Users/myuserid/confluent-5.3.1/share/java/kafka/*:/Users/myuserid/confluent-5.3.1/share/java/confluent-common/*:/Users/myuserid/confluent-5.3.1/share/java/kafka-serde-tools/*:/Users/myuserid/confluent-5.3.1/bin/../share/java/kafka/*:/Users/myuserid/confluent-5.3.1/bin/../support-metrics-client/build/dependant-libs-2.12.8/*:/Users/myuserid/confluent-5.3.1/bin/../support-metrics-client/build/libs/*:/usr/share/java/support-metrics-client/* org.apache.kafka.connect.cli.ConnectDistributed /var/folders/yn/4k6t1qzn5kg3zwgbnf9qq_v40000gn/T/confluent.CYZjfRLm/connect/connect.properties

答案 2 :(得分:0)

连接器模块由kafka连接器框架执行。对于调试,我们可以使用独立模式。我们可以将IDE配置为使用ConnectStandalone主函数作为入口点。

  1. 创建调试配置,如下所示。如果是Maven项目,则需要记住勾选“包含具有“提供的”作用域的依赖项” enter image description here

  2. 连接器属性文件需要指定连接器类名称“ connector.class”进行调试 enter image description here

  3. 可以从kafka文件夹/usr/local/etc/kafka/connect-standalone.properties复制
  4. 工作者属性文件