springboot+Flink 接收、处理数据20220919
1、pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.10.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.10.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka-0.10_2.11</artifactId>
<version>1.10.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2、MySlink
import lombok.extern.slf4j.Slf4j;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
import org.apache.kafka.common.config.Config;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@Slf4j
class MySlink extends RichSinkFunction<String> {
private AnnotationConfigApplicationContext context;
public MySlink() {
log.info("MySlink new");
}
@Override
public void open(Configuration parameters) throws Exception {
this.context=new AnnotationConfigApplicationContext(Config.class);
log.info("MySlink open");
}
@Override
public void invoke(String value, Context context) {
log.info("调用了invoke方法"+value);
}
@Override
public void close() throws Exception {
context.close();
log.info("MySlink close");
}
}
3、Runner
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.SourceFunction;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class Runner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
StreamExecutionEnvironment environment=StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<String> stream=environment.addSource(new SourceFunction<String>() {
@Override
public void run(SourceContext<String> sourceContext) throws Exception {
long c=0;
while (true){
sourceContext.collect("test"+c++);
Thread.sleep(3000);
}
}
@Override
public void cancel() {
}
});
stream.addSink(new MySlink());
environment.execute("spring flink 20220919...........");
}
}
4、Flink2034Application
@SpringBootApplication
public class Flink2034Application {
public static void main(String[] args) {
SpringApplication.run(Flink2034Application.class, args);
}
}