You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无Kafka依赖环境下捕获Kafka线网传输报文进行分析的方法

Kafka线网协议消息捕获方案咨询

我此前通常通过构造ProducerRecord实例的方式将消息发送至Kafka集群,示例代码如下:

// 初始化配置参数
// 基于配置构建KafkaProducer实例
ProducerRecord<String,String> record = new ProducerRecord<String,String>("myTopic","woohoo");
producer.send(record);

上述实现依赖org.apache.kafka.*包。

目前我使用的第三方应用支持Java 8、Groovy自定义代码开发,但未内置org.apache.kafka.*依赖包,需要手动构造符合Kafka协议的消息,因此咨询可捕获Kafka线网传输内容用于协议分析的可行方案:初步设想可使用ByteArrayOutputStream将缓冲区写入内容加载为字节数组查看,也考虑过javax.interceptors.*是否可实现该需求。
提前致谢,仍在学习的Steve。


2022-06-26 更新

当前所有程序运行在Windows 10主机上,我拥有主机管理员权限,但无法安装Wireshark等额外软件,仅可使用pktmon针对Kafka集群服务端口9002设置过滤规则;我同时可通过PowerShell分别运行kafka-console-producer手动发送消息、运行kafka-console-consumer查看接收的消息,结合自行编写的Java生产者、Java消费者程序,期望通过现有环境捕获线网传输的序列化数据。


2022-06-27 更新

此前收到的两个推荐方案均符合需求,但都依赖Wireshark,不符合我当前环境的软件安装限制。我当前尝试的实现思路为创建指向9092端口的ServerSocket与InputStream,绑定端口监听器,将端口传输的字节流写入数组用于检查,暂待验证效果。


2022-06-30 更新

该思路的变体方案已初步验证可行:我关闭主机上的Kafka服务实例,在9092端口启动一个简易服务,直接将接收到的流内容打印到控制台;通过kafka-console-producer发送消息时,控制台打印出如下字节内容:

0x0 0x0 0x0 0x1a 0x0 0x12 0x0 0x2 0x0 0x0 0x0 0x0 0x0 0x10 0x50 0x61 0x73 0x73 0x70 0x6f 0x72 0x74 0x50 0x72 0x6f 0x64 0x75 0x63 0x65 0x72

对上述字节内容的初步解析结果如下:

64位整数 == 26 == 后续内容总字节数
32位整数 ???
32位整数 ???
64位整数 == 16 == 后续字符串的字节长度
PassportProducer

解析结果中未出现topic、key、value等消息核心字段,我判断Kafka通信过程中客户端与服务端存在多轮双向交互。我曾尝试在Kafka服务运行时在同端口绑定自定义监听服务,收到“port already in use”错误提示,咨询是否可实现两个应用共享同一端口(其中一个应用仅做监听)。

内容的提问来源于stack exchange,提问作者code_warrior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:57:13