Flink on Yarn作为企业级实时计算平台的主流部署模式,除了具备弹性资源管理和作业隔离能力,还可通过高可用配置保障集群稳定运行,通过与Kafka/HBase等组件集成实现数据全链路实时处理,并通过资源调度优化提升整体吞吐和稳定性。本文将系统介绍这三大关键能力的原理、配置与最佳实践。
在生产环境下,Flink的JobManager作为集群的“调度大脑”,一旦发生故障会导致所有作业中断。为避免单点故障,Flink支持多JobManager主备部署(HA),借助Zookeeper进行主备切换和元数据一致性管理。
核心机制:
在conf/flink-conf.yaml
中添加或修改如下配置:
high-availability: zookeeper
high-availability.storageDir: hdfs:///flink/ha/ # HA元数据存储目录
high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181
high-availability.zookeeper.path.root: /flink
high-availability.cluster-id: /cluster_1 # 同一HA集群唯一标识
jobmanager.rpc.address: >
jobmanager.rpc.port: 6123
注意:
high-availability.storageDir
需为HDFS或其他分布式持久存储,切勿用本地目录。
在Yarn Session/Per-Job/Application模式下均可用。以Per-Job为例:
./bin/flink run -m yarn-cluster ...(其他参数略)
Flink会自动根据配置启动多个JobManager(Yarn ApplicationMaster),并接入Zookeeper实现主备切换。
/flink
路径下的节点变化。Flink Kafka Connector是流式数据入湖、实时分析的核心桥梁。Flink支持作为Kafka消费者(Source)和生产者(Sink)。
以Maven为例(Flink 1.16,Kafka 2.4):
<dependency>
<groupId>org.apache.flinkgroupId>
<artifactId>flink-connector-kafka_2.12artifactId>
<version>1.16.0version>
dependency>
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
Properties props = new Properties();
props.setProperty("bootstrap.servers", "kafka1:9092,kafka2:9092");
props.setProperty("group.id", "flink-group");
FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>(
"input_topic",
new SimpleStringSchema(),
props
);
DataStream<String> stream = env.addSource(consumer);
stream.print();
env.execute("Flink Kafka Example");
Flink HBase Connector用于将Flink流式计算结果写入HBase,支持低延迟、高吞吐的写入场景。
以Maven为例(Flink 1.16,HBase 2.2):
<dependency>
<groupId>org.apache.flinkgroupId>
<artifactId>flink-connector-hbase-2.2_2.12artifactId>
<version>1.16.0version>
dependency>
TableEnvironment tEnv = TableEnvironment.create(EnvironmentSettings.inStreamingMode());
tEnv.executeSql(
"CREATE TABLE hbase_sink (" +
" rowkey STRING," +
" cf ROW," +
" PRIMARY KEY (rowkey) NOT ENFORCED" +
") WITH (" +
" 'connector' = 'hbase-2.2'," +
" 'table-name' = 'test_table'," +
" 'zookeeper.quorum' = 'zk1:2181,zk2:2181,zk3:2181'" +
")"
);
tEnv.executeSql(
"INSERT INTO hbase_sink SELECT userId, ROW(userName, userAge) FROM source_table"
);
-yjm
(JobManager内存)、-ytm
(TaskManager内存)根据作业复杂度和数据量设置,避免OOM或资源浪费。-yn
(TaskManager数量)、-ys
(每个TaskManager Slot数)应与作业并行度、节点CPU核数匹配。-yqu
或-qu
参数),提高资源利用率和隔离性。taskmanager.memory.process.size
,避免频繁GC,建议设置为节点物理内存的70%-80%。taskmanager.memory.flink.size
、taskmanager.memory.jvm-metaspace.size
可进一步微调。Flink on Yarn高可用配置是企业生产环境的“护航舰”,与Kafka/HBase等大数据组件的无缝集成让数据流转与分析更高效可靠。资源调度优化则是高效利用集群、降低成本、提升稳定性的关键。建议企业在实际部署中,结合业务特点科学配置HA、组件集成和资源调度策略,打造稳定、灵活、可扩展的实时数据平台。
推荐阅读:
如需进一步探讨Flink on Yarn的安全、作业升级、自动化运维等高级话题,欢迎留言交流!