在官网上,Flink创建TableEnvironment有两种方式:1.通过静态方法 TableEnvironment.create() 创建;2.从现有的 StreamExecutionEnvironment 创建一个 StreamTableEnvironment 与 DataStream API 互操作
java
import org.apache.flink.table.api.EnvironmentSettings;
import org.apache.flink.table.api.TableEnvironment;
//1.通过静态方法 TableEnvironment.create() 创建
EnvironmentSettings settings = EnvironmentSettings
.newInstance()
.inStreamingMode()//默认为StreamingMode。可以不写
//.inBatchMode()
//.useOldPlanner()//1.14.4已过时
//.useBlinkPlanner()//1.14.4已过时。默认BLINK
.build();
TableEnvironment tEnv = TableEnvironment.create(settings);
//2.从现有的 StreamExecutionEnvironment 创建一个 StreamTableEnvironment 与 DataStream API 互操作
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.EnvironmentSettings;
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);
而在写代码时会发现,通过静态方法 TableEnvironment.create() 创建时,create()方法有两种参数,一种就是官网上的EnvironmentSettings,另一种是Configuration。
查看源码会发现EnvironmentSettings最终还是会将EnvironmentSettings转为Configuration。且可以看到默认的RUNTIME_MODE是StreamingMode。
TableEnvironment.create(settings)-->TableEnvironmentImpl.create(settings)-->create(settings, settings.toConfiguration())
java
/** Convert the environment setting to the {@link Configuration}. */
public Configuration toConfiguration() {
Configuration configuration = new Configuration();
configuration.set(RUNTIME_MODE, isStreamingMode() ? STREAMING : BATCH);
configuration.set(TABLE_PLANNER, PlannerType.BLINK);
return configuration;
}
同样,看EnvironmentSettings的构造方法也可以发现默认的RUNTIME_MODE是StreamingMode。
java
private EnvironmentSettings(
String planner,
@Nullable String executor,
String builtInCatalogName,
String builtInDatabaseName,
boolean isStreamingMode) {
this.planner = planner;
this.executor = executor;
this.builtInCatalogName = builtInCatalogName;
this.builtInDatabaseName = builtInDatabaseName;
this.isStreamingMode = isStreamingMode;
}
此外,我看的是1.14.4的源码,发现默认的planner已经是BLINK,而OLD未来将不会保留。
java
/**
* Determine the type of the {@link Planner}. Except for the optimization, the different planner
* also differs in the time semantic and so on.
*
* @deprecated The old planner has been removed in Flink 1.14. Since there is only one planner left
* (previously called the 'blink' planner), this class is obsolete and will be removed in future
* versions.
*/
@PublicEvolving
@Deprecated
public enum PlannerType {
/** Blink planner is the up-to-date planner in Flink. */
BLINK,
/** Old planner is used before. It will not be maintained in the future. */
OLD
}