在 k8s 上使用 Strimzi 部署远程调试自定义 Kafka 连接器

Posted

技术标签:

【中文标题】在 k8s 上使用 Strimzi 部署远程调试自定义 Kafka 连接器【英文标题】:Remote debugging custom Kafka connector with Strimzi deploment on k8s 【发布时间】:2021-09-20 10:46:41 【问题描述】:

我想远程调试我的自定义连接器,它是我在 Kubernetes 上部署的 Strimzi Kafka 操作员部署的一部分。

在本地(例如使用 docker 映像),这可以通过添加 JAVA_TOOL_OPTIONS 作为具有以下值的环境参数来完成:-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n 并在 docker run 命令中公开 5005 端口。

但是,在 k8s 中,我还应该将端口 5005 添加到部署中,以便我可以使用 nodeport(或其他东西)以便在集群外部公开部署的调试端口 (5005)(以便我的 IDE 可以附加到它)。

但是,我无法更改创建的 Kafka 连接部署的公开端口(毕竟,您只能应用 KafkaConnect 自定义资源,并且部署是作为其中的一部分创建的)。

是否有远程调试此连接器的解决方法?还是 Strimzi 有一些配置值?

【问题讨论】:

听起来您需要与 k8s 集群管理员合作才能公开端口(或 kubectl proxy 【参考方案1】:

一旦停止 srimzi 协调,就可以像通常进行远程调试一样完成。

完成后,从 Kafka Connect 资源中删除 srimzi.io/pause-reconciliation: "true",这会将集群恢复到原始状态

    调整 Kafka Connect 资源 1.1 为 Kafka Connect 资源添加新的环境变量 - 名称:JAVA_TOOL_OPTIONS 值:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 1.2 应用更改并等待部署结束 1.3 添加新注解 strimzi.io/pause-reconciliation:“真” 1.4 应用更改 更新 Kafka Connect 部署并添加新端口(匹配 JAVA_TOOL_OPTIONS 中的那个) 名称:调试 容器端口:5005 协议:TCP 创建一个 NodePort 服务,将 Kafka Connect 的端口 5005 映射到某个 nodePort(比如 35005) 添加远程调试配置 3.1 主机应该是k8s节点之一 3.2 端口与您在 NodePort 中定义的相同(在我们的示例中为 35005) 3.3 申请

现在您可以使用创建的配置进行调试。

【讨论】:

以上是关于在 k8s 上使用 Strimzi 部署远程调试自定义 Kafka 连接器的主要内容,如果未能解决你的问题,请参考以下文章

Kafka Connect 加载插件失败

goland远程调试k8s上容器

goland远程调试k8s上容器

goland远程调试k8s上容器

Strimzi / Kafka Connect 找不到我的插件

Strimzi kafka 出口商 kafka_consumergroup_members 指标