# mini-flink **Repository Path**: wangze123321/mini-flink ## Basic Information - **Project Name**: mini-flink - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-12 - **Last Updated**: 2026-02-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mini Flink 一个简易版本的Apache Flink实现,包含核心的批处理和流处理功能。 ## 核心功能 - **批处理**:支持从元素创建数据流、读取文本文件、执行转换操作 - **流处理**:支持添加自定义数据源、执行流处理操作 - **常用转换操作**: - `map`:将元素映射为新元素 - `filter`:根据条件过滤元素 - `reduce`:将元素归约为单个值 - `union`:合并多个数据流 - **执行环境**: - `ExecutionEnvironment`:批处理执行环境 - `StreamExecutionEnvironment`:流处理执行环境 ## 项目结构 ``` mini-flink/ ├── src/main/java/com/weed/flink/ │ ├── ExecutionEnvironment.java # 核心执行环境抽象类 │ ├── LocalExecutionEnvironment.java # 本地批处理执行环境实现 │ ├── StreamExecutionEnvironment.java # 流处理执行环境 │ ├── LocalStreamEnvironment.java # 本地流处理执行环境实现 │ ├── DataStream.java # 数据流基础类 │ ├── StreamSource.java # 流处理数据源接口 │ └── MiniFlinkTest.java # 测试类 ├── pom.xml # Maven配置文件 └── README.md # 项目说明文档 ``` ## 依赖 - Java 8+ - Maven 3+ - Hutool 5.8.26(用于文件操作) ## 编译和运行 1. **编译项目**: ```bash mvn compile ``` 2. **运行测试**: ```bash java -cp target\classes com.weed.flink.MiniFlinkTest ``` ## 使用示例 ### 批处理示例 ```java import com.weed.flink.ExecutionEnvironment; import com.weed.flink.DataStream; public class BatchExample { public static void main(String[] args) { // 获取执行环境 ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); // 从元素创建数据流 DataStream dataStream = env.fromElements(1, 2, 3, 4, 5); // 执行转换操作 DataStream result = dataStream .map(x -> x * 2) // 映射:每个元素乘以2 .filter(x -> x > 5) // 过滤:保留大于5的元素 .map(x -> x + 1); // 映射:每个元素加1 // 打印结果 result.print(); // 执行作业 env.execute("Batch Processing Example"); } } ``` ### 流处理示例 ```java import com.weed.flink.StreamExecutionEnvironment; import com.weed.flink.DataStream; import com.weed.flink.StreamSource; public class StreamExample { public static void main(String[] args) { // 获取流处理执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 创建自定义数据源 StreamSource stringSource = new StreamSource() { private int count = 0; private final int max = 3; private final String[] words = {"hello", "world", "mini", "flink"}; @Override public boolean hasNext() { return count < max; } @Override public String next() { if (count >= max) { throw new NoSuchElementException(); } return words[count++]; } }; // 添加数据源 DataStream stream = env.addSource(stringSource); // 执行转换操作 DataStream result = stream .map(s -> s.toUpperCase()) // 转换为大写 .filter(s -> s.length() > 3); // 过滤长度大于3的单词 // 打印结果 result.print(); // 执行作业 env.execute("Stream Processing Example"); } } ``` ## 支持的操作 ### DataStream 操作 | 操作 | 描述 | 示例 | |------|------|------| | `map` | 将元素映射为新元素 | `stream.map(x -> x * 2)` | | `filter` | 根据条件过滤元素 | `stream.filter(x -> x > 5)` | | `reduce` | 将元素归约为单个值 | `stream.reduce((a, b) -> a + b)` | | `union` | 合并多个数据流 | `stream1.union(stream2)` | | `print` | 打印所有元素 | `stream.print()` | | `collect` | 收集所有元素到列表 | `List data = stream.collect()` | | `count` | 获取元素数量 | `int size = stream.count()` | ### 执行环境操作 | 操作 | 描述 | 示例 | |------|------|------| | `fromElements` | 从元素创建数据流 | `env.fromElements(1, 2, 3)` | | `readTextFile` | 从文本文件读取数据流 | `env.readTextFile("data.txt")` | | `execute` | 执行作业 | `env.execute("Job Name")` | | `addSource` | 添加流处理数据源 | `env.addSource(source)` | ## 注意事项 - 这是一个简易版本的实现,主要用于学习和理解Flink的核心概念 - 不支持分布式执行,所有操作都在本地执行 - 流处理是基于有限数据源实现的,不是真正的无限流处理 - 没有状态管理和容错机制 ## 扩展建议 - 添加更多转换操作,如 `flatMap`、`keyBy`、`groupBy` 等 - 实现真正的无限流处理(基于时间或事件驱动) - 添加状态管理和容错机制 - 支持更多数据源和输出目标 - 实现分布式执行能力 ## 许可证 MIT License