sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1796 随笔 :: 22 文章 :: 24 评论 :: 227万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

在 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消费 生产级方案

注意事项

  1. 端口冲突:确保 9999 端口未被占用
  2. 防火墙设置:关闭本地防火墙或允许端口访问
    # Linux 检查端口
    netstat -tuln | grep 9999
    
  3. 数据格式:发送数据需与业务处理逻辑匹配
  4. 持续发送:使用循环或定时任务保持连接

选择最适合你的场景:快速调试推荐 netcat,自动化测试推荐集成测试工具,压力测试建议使用专业工具生成。

posted on   sunny123456  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示