API de procesamiento de flujo de Flink

Tabla de contenido

1. Medio ambiente

1.1getExecutionEnvironment

1.2crearEntornoLocal

1.3crearEntornoRemoto

En segundo lugar, lea los datos de la colección.

3. Leer datos del archivo

4. Leer datos de KafKa

1. Dependencias de importación

2. Inicie KafKa

3. código Java


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();
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_64443786/article/details/130792753
Recomendado
Clasificación