Tabla de contenido
En segundo lugar, lea los datos de la colección.
1. Dependencias de importación
1. Medio ambiente
1.1getExecutionEnvironment
Crea un entorno de ejecución, que representa el contexto del programa que se está ejecutando actualmente. Si se llama al programa de forma independiente, este método devuelve el entorno de ejecución local; si se llama al programa desde el cliente de línea de comandos para enviarlo al clúster, este método devuelve el entorno de ejecución de este clúster, es decir, getExecutionEnvironment se determinará de acuerdo con la forma en que se ejecuta la consulta El tipo de entorno de ejecución que se devuelve es la forma más utilizada para crear un entorno de ejecución.
#批处理环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
#流处理环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
Establecer el grado de paralelismo: si no se establece el grado de paralelismo, prevalecerá la configuración en flink-conf.yaml, y el valor predeterminado es 1
//设置并行度为8
env.setParallelism(8);
1.2crearEntornoLocal
Devuelve el entorno de ejecución local, debe especificar el paralelismo predeterminado al llamar
LocalStreamEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(1);
1.3crearEntornoRemoto
Vuelva al entorno de ejecución del clúster y envíe el Jar al servidor remoto. Debe especificar la IP y el número de puerto de JobManager al llamar y especificar el paquete Jar para ejecutarlo en el clúster.
StreamExecutionEnvironment env = StreamExecutionEnvironment.createRemoteEnvironment("IP",端口号,jar包路径)
En segundo lugar, lea los datos de la colección.
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import java.util.Arrays;
/**
* @author : Ashiamd email: [email protected]
* @date : 2021/1/31 5:13 PM
* 测试Flink从集合中获取数据
*/
public class SourceTest1_Collection {
public static void main(String[] args) throws Exception {
// 创建执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 设置env并行度1,使得整个任务抢占同一个线程执行
env.setParallelism(1);
// Source: 从集合Collection中获取数据
DataStream<SensorReading> dataStream = env.fromCollection(
Arrays.asList(
new SensorReading("sensor_1", 1547718199L, 35.8),
new SensorReading("sensor_6", 1547718201L, 15.4),
new SensorReading("sensor_7", 1547718202L, 6.7),
new SensorReading("sensor_10", 1547718205L, 38.1)
)
);
DataStream<Integer> intStream = env.fromElements(1,2,3,4,5,6,7,8,9);
// 打印输出
dataStream.print("SENSOR");
intStream.print("INT");
// 执行
env.execute("JobName");
}
}
3. Leer datos del archivo
El archivo se crea solo como un archivo txt
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
/**
* @author : Ashiamd email: [email protected]
* @date : 2021/1/31 5:26 PM
* Flink从文件中获取数据
*/
public class SourceTest2_File {
public static void main(String[] args) throws Exception {
// 创建执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 使得任务抢占同一个线程
env.setParallelism(1);
// 从文件中获取数据输出
DataStream<String> dataStream = env.readTextFile("/tmp/Flink_Tutorial/src/main/resources/sensor.txt");
dataStream.print();
env.execute();
}
}
4. Leer datos de KafKa
1. Dependencias de importación
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.12</artifactId>
<version>1.10.1</version>
</dependency>
<!-- kafka -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka_2.11</artifactId>
<version>1.12.1</version>
</dependency>
</dependencies>
2. Inicie KafKa
iniciar el cuidador del zoológico
./bin/zookeeper-server-start.sh [config/zookeeper.properties]
Inicie el servicio KafKa
./bin/kafka-server-start.sh -daemon ./config/server.properties
Inicie el productor de KafKa
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic sensor
3. código Java
import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;
import java.util.Properties;
/**
* @author : Ashiamd email: [email protected]
* @date : 2021/1/31 5:44 PM
*/
public class SourceTest3_Kafka {
public static void main(String[] args) throws Exception {
// 创建执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 设置并行度1
env.setParallelism(1);
Properties properties = new Properties();
//监听的kafka端口
properties.setProperty("bootstrap.servers", "localhost:9092");
// 下面这些次要参数
properties.setProperty("group.id", "consumer-group");
properties.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
properties.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
properties.setProperty("auto.offset.reset", "latest");
// flink添加外部数据源
DataStream<String> dataStream = env.addSource(new FlinkKafkaConsumer<String>("sensor", new SimpleStringSchema(),properties));
// 打印输出
dataStream.print();
env.execute();
}
}