sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在 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 2025-03-04 20:42  sunny123456  阅读(134)  评论(0)    收藏  举报