flink之自定义Source

package com.sandra.day03;

import com.sandra.bean.Event;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.ParallelSourceFunction;
import org.apache.flink.streaming.api.functions.source.SourceFunction;

import java.util.Random;

//自定义Source
public class Flink01_Source_Customer {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);

        //通过自定义source数据源获取数据
        DataStreamSource<Event> streamSource = env.addSource(new MySourceFunction()).setParallelism(2);

        streamSource.print();

        env.execute();

    }


    //自定义类实现SourceFunction接口,在里面随机生成Event,默认并行度只能设置为1
//    public static class MySourceFunction implements SourceFunction<Event>{

    //如果想要实现多并行度,需要实现ParallelSourceFunction接口
    public static class MySourceFunction implements ParallelSourceFunction<Event> {

//        private Random random = new Random();//如果写在这个位置,多并行度下每个时间段产生的数据是一样的
        private Boolean isRunning = true;

        /**
         * 该方法主要用来生成数据或者获取其他数据库数据,并且在这个方法中通常有一个while循环
         * @param ctx 可以利用上下文对象的collect方法将生成或者获取的数据发送至下游
         * @throws Exception
         */
        @Override
        public void run(SourceContext<Event> ctx) throws Exception {
            Random random = new Random(); //写在这个位置,多并行度下每个时间段产生的数据是不一样的
            String[] users = {"sandra","wuli"};
            String[] urls = {"./home","./cart","./flink","./java"};

            while (isRunning){
                ctx.collect(new Event(users[random.nextInt(users.length)],urls[random.nextInt(urls.length)],System.currentTimeMillis()));
                Thread.sleep(500);
            }
        }

        /**
         * 因为在run方法中通常有一个while循环,可以通过该方法终止,这个方法不是我们手动调用,是系统内部自动调用
         */
        @Override
        public void cancel() {
            isRunning = false;
        }
    }

}

Event:

package com.sandra.bean;

import java.sql.Timestamp;

public class Event {
    public String user;
    public String url;
    public Long timestamp;

    public Event(){

    }

    public Event(String user,String url,Long timestamp){
        this.user=user;
        this.url=url;
        this.timestamp=timestamp;

    }

    @Override
    public  String toString(){
        return "Event{"+
                "user='" + user + "'"+
                ",url='" + url + "'"+
                ",timestamp='"+new Timestamp(timestamp)+
                "'}";
    }
}

依赖(带打包插件):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sandra</groupId>
    <artifactId>flink-demo1</artifactId>
    <version>1.0-SNAPSHOT</version>



<properties>
    <flink.version>1.13.6</flink.version>
    <java.version>1.8</java.version>
    <scala.binary.version>2.12</scala.binary.version>
    <slf4j.version>1.7.30</slf4j.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-java</artifactId>
<!--        <version>1.13.6</version>-->
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
<!--        <version>1.13.6</version>-->
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients_${scala.binary.version}</artifactId>
<!--        <version>1.13.6</version>-->
        <version>${flink.version}</version>
    </dependency>

<!--    flink用本地看web ui要加的依赖-->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-runtime-web_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
    </dependency>


    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
    </dependency>


</dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <artifactSet>
                                <excludes>
                                    <exclude>com.google.code.findbugs:jsr305</exclude>
                                    <exclude>org.slf4j:*</exclude>
                                    <exclude>log4j:*</exclude>
                                </excludes>
                            </artifactSet>
                            <filters>
                                <filter>
                                    <!-- Do not copy the signatures in the META-INF folder.
                                    Otherwise, this might cause SecurityExceptions when using the JAR. -->
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers combine.children="append">
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer">
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值