Flink多流处理之join(关联)

这篇具有很好参考价值的文章主要介绍了Flink多流处理之join(关联)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flink的API中只提供了join的算子,并没有left join或者right join,这里我们就介绍一下join算子的使用,其实join算子底层调用的就是coGroup,具体原理这里就不过多介绍了,如果感兴趣可以看我前面发布的文章Flink多流操作之coGroup.文章来源地址https://www.toymoban.com/news/detail-648967.html

  • 数据源
    ➜  ~ nc -lk 1111
    101,A
    102,B
    103,C
    104,D
    105,E
    106,F
    
    ➜  ~ nc -lk 2222
    101,A,,程序员
    102,B,,程序员
    103,C,,会计
    104,D,,安全工程师
    106,K,,程序员
    108,,本科,人事
    
  • 代码
    import org.apache.flink.api.common.functions.JoinFunction;
    import org.apache.flink.api.common.typeinfo.TypeHint;
    import org.apache.flink.streaming.api.datastream.DataStream;
    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.windowing.assigners.TumblingProcessingTimeWindows;
    import org.apache.flink.streaming.api.windowing.time.Time;
    
    /**
     * @Author: J
     * @Version: 1.0
     * @CreateTime: 2023/8/10
     * @Description: 多流操作-join
     **/
    public class FlinkJoin {
        public static void main(String[] args) throws Exception {
            // 构建流环境
            StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
            // 设置并行度
            env.setParallelism(3);
            // 数据源1,以socket作为数据源
            DataStreamSource<String> socketStream1 = env.socketTextStream("localhost", 1111);
            SingleOutputStreamOperator<String[]> mapStream1 = socketStream1.map(str -> str.split(",")).returns(new TypeHint<String[]>() {});
            // 数据源2,以socket作为数据源
            DataStreamSource<String> socketStream2 = env.socketTextStream("localhost", 2222);
            SingleOutputStreamOperator<String[]> mapStream2 = socketStream2.map(str -> str.split(",")).returns(new TypeHint<String[]>() {});
            // 关联数据流
            DataStream<String> joinedStream = mapStream1.join(mapStream2)
                    .where(arr -> arr[0]) // mapStream1以数组中的第一个字段作为关联字段
                    .equalTo(arr -> arr[0]) // mapStream2以数组中的第一个字段作为关联字段
                    .window(TumblingProcessingTimeWindows.of(Time.seconds(20))) // 以20秒作为一个窗口
                    .apply(new JoinFunction<String[], String[], String>() {
                        // 这里是写关联后的具体逻辑
                        @Override
                        public String join(String[] first, String[] second) throws Exception {
                            String result = first[0] + "," + second[1] + "," + second[2] + "," + second[3];
                            return result;
                        }
                    });
            // 打印结果数据
            joinedStream.print();
    
            env.execute("Flink join");
        }
    }
    
  • 结果
    3> 103,C,男,会计
    2> 106,K,男,程序员
    2> 101,A,男,程序员
    3> 104,D,男,安全工程师
    3> 102,B,男,程序员
    
    这个API使用起来还是比较简单的,如果想实现left join或者right join的功能就需要通过coGroup来实现了.

到了这里,关于Flink多流处理之join(关联)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink学习——处理函数ProcessFunction及多流转换

            在DataStream的更底层,我们可以不定义任何具体的算子(如map(),filter()等)二只提炼出一个统一的“处理”(process)操作 。它是所有转换算子的概括性的表达。可以自定义处理逻辑。         所以这一层接口就被叫做“ 处理函数 ”( process function )         处理

    2024年02月14日
    浏览(40)
  • 【flink番外篇】2、flink的23种算子window join 和interval join 数据倾斜、分区介绍及详细示例(3)- 数据倾斜处理、分区示例

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月03日
    浏览(44)
  • Flink (八) --------- 多流转换

    无论是基本的简单转换和聚合,还是基于窗口的计算,我们都是针对一条流上的数据进行处理的。而在实际应用中,可能需要将不同来源的数据连接合并在一起处理,也有可能需要将一条流拆分开,所以经常会有对多条流进行处理的场景。本章我们就来讨论 Flink 中对多条流进

    2023年04月09日
    浏览(28)
  • 大数据Flink(九十):Lookup Join(维表 Join)

    文章目录 Lookup Join(维表 Join) Lookup Join 定义(支持 BatchStreaming) :Lookup Join 其实就是维表 Join,比如拿离线数仓来说,常常会有用户画像,设备画像等数据,而对应到实时数仓场景中,这种实时获取外部缓存的 Join 就叫做维表 Join。

    2024年02月04日
    浏览(33)
  • Flink多流转换(2)—— 双流连结

    双流连结(Join):根据某个字段的值将数据联结起来,“配对”去做处理 可以 定义时间窗口 ,并将两条流中 共享一个公共键 (key)的数据放在窗口中进行配对处理 首先需要调用 DataStream 的 .join() 方法来合并两条流,得到一个 JoinedStreams;接着通过 .where() 和 .equalTo() 方法指

    2024年02月19日
    浏览(26)
  • Flink多流转换(1)—— 分流&合流

    目录 分流 代码示例 使用侧输出流 合流 联合(Union) 连接(Connect) 简单划分的话,多流转换可以分为“分流”和“合流”两大类 目前分流的操作一般是通过侧输出流(side output)来实现,而合流的算子比较丰富,根据不同的需求可以调用 union、connect、join 以及 coGroup 等接口

    2024年01月24日
    浏览(27)
  • 【flink番外篇】2、flink的23种算子window join 和interval join 数据倾斜、分区介绍及详细示例(1)- window join

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月03日
    浏览(48)
  • 【flink番外篇】9、Flink Table API 支持的操作示例(14)- 时态表的join(java版本)

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月02日
    浏览(42)
  • 《Flink学习笔记》——第九章 多流转换

    无论是基本的简单转换和聚合,还是基于窗口的计算,我们都是针对一条流上的数据进行处理的。而在实际应用中,可能需要将不同来源的数据连接合并在一起处理,也有可能需要将一条流拆分开,所以经常会有对多条流进行处理的场景 简单划分(两大类): 分流——把一

    2024年02月11日
    浏览(35)
  • Flink+Paimon多流拼接性能优化实战

    目录 (零)本文简介 意外收获: (一)背景 (二)探索梳理过程 (三)源码改造 (四)修改效果 1、JOB状态 2、Level5的dataFile总大小 3、数据延迟 4、关联率 (五)未来展望:异步Compact Paimon多流拼接/合并性能优化;         为解决 离线T+1多流拼接数据时效性 、 Flink实时

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包