Flink多流处理之connect拼接流

Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStreamrightStream,也可以使用不同的逻辑处理leftStreamrightStream.

如下图:

下面的演示代码也可以通过这个图结合来看,其实connect算子最主要的作用就是共享状态,如常用的广播状态.

  • 代码
java 复制代码
import org.apache.flink.streaming.api.datastream.ConnectedStreams;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.co.CoMapFunction;

import java.util.Arrays;

/**
 * @Author: J
 * @Version: 1.0
 * @CreateTime: 2023/8/7
 * @Description: 多流操作-流连接
 **/
public class FlinkConnect {
    public static void main(String[] args) throws Exception {
        // 构建流环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        // 设置并行度
        env.setParallelism(3);
        // 添加数据源1
        DataStreamSource<String> sourceStream1 = env.fromCollection(Arrays.asList("a", "b", "c", "d"));
        // 添加数据源2
        DataStreamSource<Double> sourceStream2 = env.fromCollection(Arrays.asList(22.2, 11.0, 6.0, 98.0, 100.0));

        // 拼接数据流
        ConnectedStreams<String, Double> connectedStream = sourceStream1.connect(sourceStream2);

        // 这里使用map算子作为演示
        SingleOutputStreamOperator<String> resultStream = connectedStream.map(new CoMapFunction<String, Double, String>() {
            /**
             * map1作为左流
             **/
            @Override
            public String map1(String value) throws Exception {
                return "字符串: " + value;
            }

            /**
             * map2作为右流
             **/
            @Override
            public String map2(Double value) throws Exception {
                return "数字: " + (value * 100);
            }
        });

        // 打印结果
        resultStream.print();

        env.execute("Connect Operator");
    }
}
  • 结果

    3> 字符串: b
    1> 数字: 600.0
    2> 字符串: a
    3> 数字: 1100.0
    2> 数字: 2220.0
    2> 字符串: d
    2> 数字: 9800.0
    3> 数字: 10000.0
    1> 字符串: c

相关推荐
北京软秦科技有限公司17 分钟前
IACheck AI报告文档审核:驱动高端制造合规管理报告审核升级的新引擎
大数据·人工智能·制造
AC赳赳老秦19 分钟前
国产化AI运维新趋势:DeepSeek赋能国产算力部署的高效故障排查
大数据·人工智能·python·django·去中心化·ai-native·deepseek
武子康20 分钟前
大数据-246 离线数仓 - 电商分析 Hive 拉链表实战:初始化、每日增量更新、回滚脚本与错误排查
大数据·后端·apache hive
Never_every9920 分钟前
5 个批量抠图工具,提升 10 倍效率
大数据·前端·ai
petrel201525 分钟前
【Spark】深度魔改 Spark 源码:打破静态限制,实现真正的运行时动态扩缩容
大数据·分布式·spark
体育分享_大眼42 分钟前
AI天花板级碰撞!GPT-5.4正式接入DataEyes,数据智能进入「秒级响应」时代
大数据·人工智能·gpt
PLY0101 小时前
如何判断你的品牌适不适合找电商代运营?
大数据·产品运营
StarChainTech1 小时前
告别“催款”焦虑:如何打造一款高可用、多场景的智能代扣系统
大数据·人工智能·微信小程序·小程序·软件需求
wanhengidc1 小时前
什么是高性能计算服务器?
大数据·运维·服务器·游戏·智能手机
视***间1 小时前
视程空间:以技术创新为翼,打造边缘计算全场景解决方案
大数据·人工智能·机器人·边缘计算