1 背景
目标:在arm架构的K8S上部署一套flink集群。
我对k8s还算了解,但在此之前没接触过flink,部署起来确实有点困难。本文记录在此过程中遇到的问题,以及问题原因和解决方案。
2 准备工作
flink的arm镜像
flink的arm镜像:
- 需包含arm版jdk1.8
- flink版本为1.17.2
该镜像的构建方法可参考我的文章:arm环境下构建Flink的Docker镜像。
k8s环境
已有k8s集群环境。
我所在的环境是1.18,部署在arm架构的服务器上。
3 部署
我参考了官方的经验(见 https://nightlies.apache.org/flink/flink-docs-master/zh/docs/deployment/resource-providers/standalone/kubernetes/ ),建议大家酌情参考。
也许你也会踩一遍我经历过的坑。
3.1 ConfigMap
flink-configuration-configmap.yaml
这个是flink的配置文件,对应着安装包中 ${FLINK_HOME}/conf/flink-conf.yaml。
基本不用动,可以直接拷贝过来使用(在生产环境中需要根据实际情况修改配置参数)。
apiVersion: v1
kind: ConfigMap
metadata:
name: flink-config
namespace: "flink-ns"
labels:
app: flink
data:
flink-conf.yaml: |+
jobmanager.rpc.address: flink-jobmanager
taskmanager.numberOfTaskSlots: 2
blob.server.port: 6124
jobmanager.rpc.port: 6123
taskmanager.rpc.port: 6122
jobmanager.memory.process.size: 1600m
taskmanager.memory.process.size: 1728m
parallelism.default: 2
log4j-console.properties: |+
rootLogger.level = INFO
rootLogger.appenderRef.console.ref = ConsoleAppender
rootLogger.appenderRef.rolling.ref = RollingFileAppender
logger.flink.name = org.apache.flink
logger.flink.level = INFO
logger.pekko.name = org.apache.pekko
logger.pekko.level = INFO
logger.kafka.name= org.apache.kafka
logger.kafka.level = INFO
logger.hadoop.name = org.apache.hadoop
logger.hadoop.level = INFO
logger.zookeeper.name = org.apache.zookeeper
logger.zookeeper.level = INFO
# 将所有 info 级别的日志输出到 console
appender.console.name = ConsoleAppender
appender.console.type = CONSOLE
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n
# 将所有 info 级别的日志输出到指定的 rolling file
appender.rolling.name = RollingFileAppender
appender.rolling.type = RollingFile
appender.rolling.append = false
appender.rolling.fileName = ${sys:log.file}
appender.rolling.filePattern = ${sys:log.file}.%i
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 10
# 关闭 Netty channel handler 中不相关的(错误)警告
logger.netty.name = org.jboss.netty.channel.DefaultChannelPipeline
logger.netty.level = OFF
配置文件中,部署集群时需要重点关注的参数:
jobmanager.rpc.address: flink-jobmanager
该参数定义了 taskmanager 与 jobmanager 通信的rpc地址,这里使用了服务名称
flink-jobmanager,该服务需要另行定义。
3.2 Service
为清晰管理服务,我将rpc服务和rest服务拆开了。