目次
1. 環境
1.1実行環境の取得
現在実行中のプログラムのコンテキストを表す実行環境を作成します。プログラムが独立して呼び出された場合、このメソッドはローカルの実行環境を返します。プログラムがクラスターに送信するためにコマンド ライン クライアントから呼び出された場合、このメソッドはこのクラスターの実行環境を返します。つまり、getExecutionEnvironment は次に従って決定されます。クエリの実行方法 どのような実行環境が返されるかは、実行環境を作成するために最も一般的に使用される方法です。
#批处理环境
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
#流处理环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
並列度を設定します。並列度が設定されていない場合は、flink-conf.yaml の設定が優先され、デフォルトは 1 です。
//设置并行度为8
env.setParallelism(8);
1.2ローカル環境の作成
ローカル実行環境を返します。呼び出し時にデフォルトの並列処理を指定する必要があります。
LocalStreamEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(1);
1.3リモート環境の作成
クラスター実行環境に戻り、Jar をリモート サーバーに送信します。呼び出し時に JobManager の IP とポート番号を指定し、クラスター内で実行する Jar パッケージを指定する必要があります。
StreamExecutionEnvironment env = StreamExecutionEnvironment.createRemoteEnvironment("IP",端口号,jar包路径)
次に、コレクションからデータを読み取ります
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. ファイルからデータを読み取る
ファイルは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. KafKa からデータを読み取る
1. 依存関係をインポートする
<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.KafKaを起動する
飼育員を始める
./bin/zookeeper-server-start.sh [config/zookeeper.properties]
KafKaサービスを開始する
./bin/kafka-server-start.sh -daemon ./config/server.properties
KafKa プロデューサーを開始する
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic sensor
3. 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();
}
}