Debezium系列- kafka connet debug

探讨使用Debezium从MySQL采集Binlog并集成到Hive的挑战,包括时间转换错误及Kafka Connect的远程调试技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

使用Debezium采集MySQL Binlog 集成到Hive中,采坑(一)(二) 中对问题的猜想还没得到证实,又发现了 Debezium 采集 MySQL 时间转换时间错乱问题,关于时间错乱问题后续文章中会详细分析,于是走上kafka connect的debug之路。

原理

根本原理就是利用远程debug 模式:服务端远程开启debug模式,本地链接远程端口调试集合。但是如何开启呢?下面将细细道来

开启过程

服务端开启debug

哈哈!!!其实开启 debug 模式很简单,在$confluent_home/bin/kafka-run-class 启动文件中,将KAFKA_DEBUG赋值即可,建议配置为 KAFKA_DEBUG=true。
本人使用的是 confluence 包一键搭建的开发环境,对于开发搭建十分简单但对开启debug模式有个小坑,如果简单的将 KAFKA_DEBUG赋值,会有端口冲突问题。 原因是开发者模式模式下启动,zookeeper 、 kafka 、kafka connect 的启动都会调用 $confluent_home/bin/kafka-run-class 去其对应的应用。

## zookeeper
cat zookeeper-server-start
## 此处省略N行,最后
exec $base_dir/kafka-run-class $EXTRA_ARGS org.apache.zookeeper.server.quorum.QuorumPeerMain "$@"

## kafka
cat kafka-server-start
## 此处省略N行,最后
exec $base_dir/kafka-run-class $EXTRA_ARGS io.confluent.support.metrics.SupportedKafka "$@"
## connect
cat connect-distributed
## 此处省略N行,最后
exec $(dirname $0)/kafka-run-class $EXTRA_ARGS org.apache.kafka.connect.cli.ConnectDistributed "$@"

每个应用的启动都开启远程debug 并且端口都是默认的不冲突才怪,知道了原因解决就不是问题了,于是乎做如下小优化,只有在启动connect的时候才启用debug

# Set Debug options if enabled

if [ "$1" = "org.apache.kafka.connect.cli.ConnectDistributed" ]; then
   KAFKA_DEBUG=true
fi

重启应用查看connect 日志

...
Listening for transport dt_socket at address: 5005
...

看到如上关键日志说明你服务端debug开启成功了,少年嗨起来吧!

本地开启连接远程debug

需要用的源代码,自行github下载,我使用的是idea将源码导入后直接新建一个运行窗口配置如下:
在这里插入图片描述
点击debug后,想断点哪里就断点哪里。
在这里插入图片描述

后续

开启debug 成功后,将之前 采坑(一)(二) 猜想走了一遍猜想的没问题,运行是就是这样的,下篇说下时间转换问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值