apache-kafka - 在 k8s 上使用 Strimzi 部署远程调试自定义 Kafka 连接器
问题描述
我想远程调试我的自定义连接器,它是我在 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 有一些配置值?
解决方案
一旦停止 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 添加新注释
srimzi.io/pause-reconciliation: "true"
1.4 应用更改 - 更新 Kafka Connect 部署并添加新端口(匹配 JAVA_TOOL_OPTIONS 中的那个)
- 名称:调试
容器端口:5005
协议:TCP
- 名称:调试
- 创建一个 NodePort 服务,将 Kafka Connect 的端口 5005 映射到某个 nodePort(比如 35005)
- 添加远程调试配置 3.1 主机应该是 k8s 节点之一
3.2 端口与您在 NodePort 中定义的相同(在我们的示例中为 35005)
3.3 应用
现在您可以使用创建的配置进行调试。
推荐阅读
- android - 是否可以使用 Oboe 或其他库将 Android 手机的 DAC 设置为使用 24 位或 32 位?
- image - 将博客文章的链接从文本更改为图像链接
- tensorflow - Keras 错误:AttributeError:模块“tensorflow”没有属性“get_default_graph”
- python - 使用 pygrib 写入插值 grib2 数据会导致 grib 文件不可用
- git - 如何挑选作者所做的所有提交?
- requirejs - PDF.js 使用 RequireJS 呈现不正确的字符
- regex - 使用正则表达式匹配模式,如
狗 猫 - bucket - 有没有办法只提取元数据和 grib 中的特定范围?
- java - Bean 属性 'sakilaDao' 不可写或具有无效的 setter 方法。setter 的参数类型是否与 getter 的返回类型匹配?
- typescript - 如何从 nodejs 服务器的 react-native-webview 获取数据?