如何将 Flink 服务独立部署
Flink 是 HAP 系统中的扩展模块,用户可自主选择是否启用,快速部署可参考部署 Flink 服务
快速部署是将 Flink 服务部署在与 HAP 微服务同一台服务器上,对硬件的可用资源要求较高,如果单台服务器无法满足,可以参考此文档将 Flink 服务独立部署在一台新服务器上,服务器配置可参考单机 Flink 服务器配置
安装 Docker
安装 Docker,可参考官方对不同 Linux 版本的 安装说明 或 参考部署示例中的 Docker 安装章节
检查当前 HAP 服务是否有包含独立 MinIO 服务
在 HAP 服务器执行下方命令,检查是否有输出包含关键字 start minio 的一行内容
docker logs $(docker ps | grep sc | awk '{print $1}') | grep minio
-
有输出则代表有独立 MinIO 服务
-
无输出则代表没有独立 MinIO 服务
HAP 微服务调整
- 有独立 MinIO 服务
- 无独立 MinIO 服务
Flink 服务需要访问 MinIO、Kafka、MongoDB 服务,这时需要映射出 HAP 单机模式存储组件容器中的这三个服务访问端口,如果 HAP 为集群模式则不需要调整。
请参考以下配置示例,修改 docker-compose.yaml 文件
-
添加 MinIO、Kafka 和 MongoDB 的服务端口映射
聚合表功能需要 Flink 能够访问 MongoDB 服务,如果不启用聚合表功能则可以不映射 MongoDB 端口。
如果需要映射出 MongoDB 端口,单机模式内置的的 MongoDB 默认未开启认证,操作前请仔细阅读关于 数据安全 的文档。
-
配置 HAP 连接 Flink 服务的环境变量
app:environment:ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址sc:ports:- 9010:9010 # 新增 MinIO 端口映射- 9092:9092 # 新增 Kafka 端口映射- 27017:27017 # 新增 MongoDB 端口映射docker-compose.yaml 配置文件示例
- Linux amd64
- Linux arm64
version: '3'services:app:image: nocoly/hap:7.3.6environment: &app-environmentENV_ADDRESS_MAIN: "https://hap.domain.com"ENV_APP_VERSION: "7.3.6"ENV_API_TOKEN: "******"ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址ports:- 8880:8880volumes:- ./volume/data/:/data/- ../data:/data/hap/datasc:image: nocoly/sc:3.2.0environment:<<: *app-environmentvolumes:- ./volume/data/:/data/ports:- 9010:9010 # 新增 MinIO 端口映射- 9092:9092 # 新增 Kafka 端口映射- 27017:27017 # 新增 MongoDB 端口映射version: '3'services:app:image: nocoly/hap-arm64:-environment: &app-environmentENV_ADDRESS_MAIN: "https://hap.domain.com"ENV_APP_VERSION: "-"ENV_API_TOKEN: "******"ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址ports:- 8880:8880volumes:- ./volume/data/:/data/- ../data:/data/hap/datasc:image: nocoly/sc-arm64:-environment:<<: *app-environmentvolumes:- ./volume/data/:/data/ports:- 9010:9010 # 新增 MinIO 端口映射- 9092:9092 # 新增 Kafka 端口映射- 27017:27017 # 新增 MongoDB 端口映射
修改后在安装管理器目录下执行 bash service.sh restartall 重启微服务生效
Flink 服务需要访问 MinIO、Kafka、MongoDB 服务,但是首次部署的版本较旧时,没有内置的 MinIO 服务,这时只需要映射出 HAP 单机模式存储组件容器中的 Kafka、MongoDB 服务这两个服务访问端口,如果 HAP 为集群模式则不需要调整。
请参考以下配置示例,修改 docker-compose.yaml 文件
-
添加 MinIO、Kafka 和 MongoDB 的服务端口映射
聚合表功能需要 Flink 能够访问 MongoDB 服务,如果不启用聚合表功能则可以不映射 MongoDB 端口。
如果需要映射出 MongoDB 端口,单机模式内置的的 MongoDB 默认未开启认证,操作前请仔细阅读关于 数据安全 的文档。
-
配置 HAP 连接 Flink 服务的环境变量
app:environment:ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址sc:ports:- 9092:9092 # 新增 Kafka 端口映射- 27017:27017 # 新增 MongoDB 端口映射docker-compose.yaml 配置文件示例
- Linux amd64
- Linux arm64
version: '3'services:app:image: nocoly/hap:7.3.6environment: &app-environmentENV_ADDRESS_MAIN: "https://hap.domain.com"ENV_APP_VERSION: "7.3.6"ENV_API_TOKEN: "******"ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址ports:- 8880:8880volumes:- ./volume/data/:/data/- ../data:/data/hap/datasc:image: nocoly/sc:3.2.0environment:<<: *app-environmentvolumes:- ./volume/data/:/data/ports:- 9092:9092 # 新增 Kafka 端口映射- 27017:27017 # 新增 MongoDB 端口映射version: '3'services:app:image: nocoly/hap-arm64:-environment: &app-environmentENV_ADDRESS_MAIN: "https://hap.domain.com"ENV_APP_VERSION: "-"ENV_API_TOKEN: "******"ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址ports:- 8880:8880volumes:- ./volume/data/:/data/- ../data:/data/hap/datasc:image: nocoly/sc-arm64:-environment:<<: *app-environmentvolumes:- ./volume/data/:/data/ports:- 9092:9092 # 新增 Kafka 端口映射- 27017:27017 # 新增 MongoDB 端口映射
修改后在安装管理器目录下执行 bash service.sh restartall 重启微服务生效
Flink 服务部署
- 有独立 MinIO 服务
- 无独立 MinIO 服务
-
初始化 swarm 环境
docker swarm init -
创建目录
mkdir -p /data/hap/script/volume/data -
下载 flink 镜像(离线包下载)
- Linux amd64
- Linux arm64
docker pull nocoly/flink:1.19.720docker pull nocoly/flink-arm64:- -
创建配置文件
- Linux amd64
- Linux arm64
cat > /data/hap/script/flink.yaml <<EOFversion: '3'services:flink:image: nocoly/flink:1.19.720entrypoint: ["/bin/bash"]command: ["/run.sh"]environment:ENV_FLINK_S3_ACCESSKEY: "mdstorage"ENV_FLINK_S3_SECRETKEY: "eBxExGQJNhGosgv5FQJiVNqH"ENV_FLINK_S3_SSL: "false"ENV_FLINK_S3_PATH_STYLE_ACCESS: "true"ENV_FLINK_S3_ENDPOINT: "sc:9010"ENV_FLINK_S3_BUCKET: "mdoc"ENV_FLINK_LOG_LEVEL: "INFO"ENV_FLINK_JOBMANAGER_MEMORY: "4096m"ENV_FLINK_TASKMANAGER_MEMORY: "16384m"ENV_FLINK_TASKMANAGER_SLOTS: "50"ENV_KAFKA_ENDPOINTS: "sc:9092"ports:- 58081:8081volumes:- ./volume/data/:/data/extra_hosts:- "sc:192.168.10.28" # 这里需要改成 HAP 服务器实际的内网 IP 地址EOFcat > /data/hap/script/flink.yaml <<EOFversion: '3'services:flink:image: nocoly/flink-arm64:-entrypoint: ["/bin/bash"]command: ["/run.sh"]environment:ENV_FLINK_S3_ACCESSKEY: "mdstorage"ENV_FLINK_S3_SECRETKEY: "eBxExGQJNhGosgv5FQJiVNqH"ENV_FLINK_S3_SSL: "false"ENV_FLINK_S3_PATH_STYLE_ACCESS: "true"ENV_FLINK_S3_ENDPOINT: "sc:9010"ENV_FLINK_S3_BUCKET: "mdoc"ENV_FLINK_LOG_LEVEL: "INFO"ENV_FLINK_JOBMANAGER_MEMORY: "4096m"ENV_FLINK_TASKMANAGER_MEMORY: "16384m"ENV_FLINK_TASKMANAGER_SLOTS: "50"ENV_KAFKA_ENDPOINTS: "sc:9092"ports:- 58081:8081volumes:- ./volume/data/:/data/extra_hosts:- "sc:192.168.10.28" # 这里需要改成 HAP 服务器实际的内网 IP 地址EOF -
配置启动脚本
cat > /data/hap/script/startflink.sh <<-EOFdocker stack deploy -c /data/hap/script/flink.yaml flinkEOFchmod +x /data/hap/script/startflink.sh -
启动 Flink 服务
bash /data/hap/script/startflink.sh- flink 容器启动后,进程需要 5 分钟左右才会启动完成
- 停止 flink 命令:
docker stack rm flink
-
初始化 swarm 环境
docker swarm init -
创建目录
mkdir -p /data/hap/script/volume/data -
下载 flink 镜像(离线包下载)
- Linux amd64
- Linux arm64
docker pull nocoly/flink:1.19.720docker pull nocoly/flink-arm64:- -
创建配置文件
- Linux amd64
- Linux arm64
cat > /data/hap/script/flink.yaml <<EOFversion: '3'services:flink:image: nocoly/flink:1.19.720entrypoint: ["/bin/bash"]command: ["/run.sh"]environment:ENV_FLINK_S3_ACCESSKEY: "mdstorage"ENV_FLINK_S3_SECRETKEY: "eBxExGQJNhGosgv5FQJiVNqH"ENV_FLINK_S3_SSL: "false"ENV_FLINK_S3_PATH_STYLE_ACCESS: "true"ENV_FLINK_S3_ENDPOINT: "flink-minio:9000"ENV_FLINK_S3_BUCKET: "mdoc"ENV_FLINK_LOG_LEVEL: "INFO"ENV_FLINK_JOBMANAGER_MEMORY: "4096m"ENV_FLINK_TASKMANAGER_MEMORY: "16384m"ENV_FLINK_TASKMANAGER_SLOTS: "50"ENV_KAFKA_ENDPOINTS: "sc:9092"ports:- 58081:8081volumes:- ./volume/data/:/data/extra_hosts:- "sc:192.168.10.28" # 这里需要改成 HAP 服务器实际的内网 IP 地址flink-minio:container_name: flink-minioimage: nocoly/minio:RELEASE.2025-04-22T22-12-26Zenvironment:MINIO_ROOT_USER: "mdstorage"MINIO_ROOT_PASSWORD: "eBxExGQJNhGosgv5FQJiVNqH"volumes:- ./volume/data/:/data/command: minio server /data/flink-minio --console-address ":9001"EOFcat > /data/hap/script/flink.yaml <<EOFversion: '3'services:flink:image: nocoly/flink-arm64:-entrypoint: ["/bin/bash"]command: ["/run.sh"]environment:ENV_FLINK_S3_ACCESSKEY: "mdstorage"ENV_FLINK_S3_SECRETKEY: "eBxExGQJNhGosgv5FQJiVNqH"ENV_FLINK_S3_SSL: "false"ENV_FLINK_S3_PATH_STYLE_ACCESS: "true"ENV_FLINK_S3_ENDPOINT: "flink-minio:9000"ENV_FLINK_S3_BUCKET: "mdoc"ENV_FLINK_LOG_LEVEL: "INFO"ENV_FLINK_JOBMANAGER_MEMORY: "4096m"ENV_FLINK_TASKMANAGER_MEMORY: "16384m"ENV_FLINK_TASKMANAGER_SLOTS: "50"ENV_KAFKA_ENDPOINTS: "sc:9092"ports:- 58081:8081volumes:- ./volume/data/:/data/extra_hosts:- "sc:192.168.10.28" # 这里需要改成 HAP 服务器实际的内网 IP 地址flink-minio:container_name: flink-minioimage: nocoly/minio-arm64:RELEASE.2025-04-22T22-12-26Zenvironment:MINIO_ROOT_USER: "mdstorage"MINIO_ROOT_PASSWORD: "eBxExGQJNhGosgv5FQJiVNqH"volumes:- ./volume/data/:/data/command: minio server /data/flink-minio --console-address ":9001"EOF -
下载 minio 镜像
- Linux amd64
- Linux arm64
docker pull nocoly/minio:RELEASE.2025-04-22T22-12-26Z若无法访问互联网,请先下载离线镜像文件,上传至服务器后再完成镜像文件的导入。离线镜像文件下载链接:
https://pdpublic.nocoly.com/offline/minio-linux-amd64-RELEASE.2025-04-22T22-12-26Z.tar.gzdocker pull nocoly/minio-arm64:RELEASE.2025-04-22T22-12-26Z若无法访问互联网,请先下载离线镜像文件,上传至服务器后再完成镜像文件的导入。离线镜像文件下载链接:
https://pdpublic.nocoly.com/offline/minio-linux-arm64-RELEASE.2025-04-22T22-12-26Z.tar.gz -
配置启动脚本
cat > /data/hap/script/startflink.sh <<-EOFdocker stack deploy -c /data/hap/script/flink.yaml flinkEOFchmod +x /data/hap/script/startflink.sh -
启动 Flink 服务
bash /data/hap/script/startflink.sh- flink 容器启动后,进程需要 5 分钟左右才会启动完成
- 停止 flink 命令:
docker stack rm flink
-
进入 minio 容器创建 flink 所需 bucket
docker exec -it flink-minio bashmc alias set myminio http://127.0.0.1:9000 mdstorage eBxExGQJNhGosgv5FQJiVNqHmc mb myminio/mdoc