在 Java Flink 中通过 socketTextStream("localhost", 9999)
监听本地 9999 端口时,可以通过以下方法生成测试数据:
一、命令行工具快速测试
1. 使用 netcat
(推荐)
# Linux/Mac 系统(安装命令:apt-get/yum/brew install netcat)
nc -lk 9999
# Windows 系统(需安装nmap工具包中的ncat)
ncat -lk 9999
输入任意文本并按回车发送,例如:
hello
world
flink,2023
2. 循环发送测试数据
# Linux/Mac 持续发送递增数字
while true; do echo "data_$(date +%s)"; sleep 1; done | nc -lk 9999
# 发送CSV格式数据示例
while true; do echo "$((RANDOM%100)),user_$((RANDOM%10)),${RANDOM}"; sleep 0.1; done | nc -lk 9999
二、Java 客户端生成数据
编写简单的 Socket 客户端:
public class SocketDataGenerator {
public static void main(String[] args) throws IOException {
try (Socket socket = new Socket("localhost", 9999);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
// 持续生成随机数据
while (true) {
String data = String.format("event_%d,%d",
System.currentTimeMillis(),
new Random().nextInt(1000));
out.println(data);
Thread.sleep(1000); // 每秒发送一次
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
三、Python 客户端示例
import socket
import time
import random
def generate_data():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(("localhost", 9999))
while True:
data = f"py_data,{random.randint(1,100)},{time.time()}\n"
s.sendall(data.encode())
time.sleep(0.5)
if __name__ == "__main__":
generate_data()
四、集成测试方法(不依赖真实Socket)
使用 Flink 测试工具类:
public class SocketSourceTest {
@Test
public void testSocketSource() throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<String> source = env.socketTextStream("localhost", 9999);
source.print();
// 注入测试数据
SourceFunctionTestHarness<String> harness =
new SourceFunctionTestHarness<>(new SocketTextStreamFunction(
"localhost", 9999, "\n", 0), 1);
harness.open();
harness.processElement("test1", 0);
harness.processElement("test2", 1);
// 触发作业执行
env.execute();
}
}
五、高级数据生成工具
工具 | 命令示例 | 说明 |
---|---|---|
Apache Bench | ab -n 100 -c 1 "http://dummy/ |
需配合脚本转换 |
自定义脚本 | `jq -nr 'range(100) | "data-(.)"' |
Kafka | 先写入Kafka再用Flink消费 | 生产级方案 |
注意事项
- 端口冲突:确保 9999 端口未被占用
- 防火墙设置:关闭本地防火墙或允许端口访问
# Linux 检查端口 netstat -tuln | grep 9999
- 数据格式:发送数据需与业务处理逻辑匹配
- 持续发送:使用循环或定时任务保持连接
选择最适合你的场景:快速调试推荐 netcat
,自动化测试推荐集成测试工具,压力测试建议使用专业工具生成。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律