如何将 Flink 服务独立部署
数据集成是 HAP 系统中的扩展模块,用户可自主选择是否启用,快速部署可参考启用数据集成功能
快速部署是将数据集成功能依赖的 Flink 服务部署在与 HAP 微服务同一台服务器上,对硬件的可用资源要求较高,如果单台服务器无法满足,可以参考此文档将 Flink 服务独立部署在一台新服务器上,服务器配置可参考单机数据集成服务器配置
安装 Docker
安装 Docker,可参考官方对不同 Linux 版本的 安装说明 或 参考部署示例中的 Docker 安装章节
检查当前 HAP 服务是否有包含独立 MinIO 服务
在 HAP 服务器执行下方命令,检查是否有输出包含关键字 start minio
的一行内容
docker logs $(docker ps | grep hap-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 配置文件示例
version: '3'
services:
app:
image: nocoly/hap-community:6.3.3
environment: &app-environment
ENV_ADDRESS_MAIN: "https://hap.domain.com"
ENV_APP_VERSION: "6.3.3"
ENV_API_TOKEN: "******"
ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址
ports:
- 8880:8880
volumes:
- ./volume/data/:/data/
- ../data:/data/hap/data
sc:
image: nocoly/hap-sc:3.1.0
environment:
<<: *app-environment
volumes:
- ./volume/data/:/data/
ports:
- 9010:9010 # 新增 MinIO 端口映射
- 9092:9092 # 新增 Kafka 端口映射
- 27017:27017 # 新增 MongoDB 端口映射
volumes:
- ./volume/data/:/data/
修改后在安装管理器目录下执行 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 配置文件示例
version: '3'
services:
app:
image: nocoly/hap-community:6.3.3
environment: &app-environment
ENV_ADDRESS_MAIN: "https://hap.domain.com"
ENV_APP_VERSION: "6.3.3"
ENV_API_TOKEN: "******"
ENV_FLINK_URL: http://192.168.10.30:58081 # 新增,填写 Flink 服务的地址,注意修改为实际的 IP 地址
ports:
- 8880:8880
volumes:
- ./volume/data/:/data/
- ../data:/data/hap/data
sc:
image: nocoly/hap-sc:3.1.0
environment:
<<: *app-environment
volumes:
- ./volume/data/:/data/
ports:
- 9092:9092 # 新增 Kafka 端口映射
- 27017:27017 # 新增 MongoDB 端口映射
volumes:
- ./volume/data/:/data/
修改后在安装管理器目录下执行 bash service.sh restartall
重启微服务生效
Flink 服务部署
- 有独立 MinIO 服务
- 无独立 MinIO 服务
-
初始化 swarm 环境
docker swarm init
-
创建目录
mkdir -p /data/hap/script/volume/data
-
下载 flink 镜像(离线包下载)
docker pull nocoly/hap-flink:1.17.1.530
-
创建配置文件
cat > /data/hap/script/flink.yaml <<EOF
version: '3'
services:
flink:
image: nocoly/hap-flink:1.17.1.530
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:8081
volumes:
- ./volume/data/:/data/
extra_hosts:
- "sc:192.168.10.28" # 这里需要改成 HAP 服务器实际的内网 IP 地址
EOF -
配置启动脚本
cat > /data/hap/script/startflink.sh <<-EOF
docker stack deploy -c /data/hap/script/flink.yaml flink
EOF
chmod +x /data/hap/script/startflink.sh -
启动数据集成服务
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 镜像(离线包下载)
docker pull nocoly/hap-flink:1.17.1.530
-
创建配置文件
cat > /data/hap/script/flink.yaml <<EOF
version: '3'
services:
flink:
image: nocoly/hap-flink:1.17.1.530
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:8081
volumes:
- ./volume/data/:/data/
extra_hosts:
- "sc:192.168.10.28" # 这里需要改成 HAP 服务器实际的内网 IP 地址
flink-minio:
container_name: flink-minio
image: nocoly/hap-minio:RELEASE.2025-04-22T22-12-26Z
environment:
MINIO_ROOT_USER: "mdstorage"
MINIO_ROOT_PASSWORD: "eBxExGQJNhGosgv5FQJiVNqH"
volumes:
- ./volume/data/:/data/
command: minio server /data/flink-minio --console-address ":9001"
EOF -
配置启动脚本
cat > /data/hap/script/startflink.sh <<-EOF
docker stack deploy -c /data/hap/script/flink.yaml flink
EOF
chmod +x /data/hap/script/startflink.sh -
启动数据集成服务
bash /data/hap/script/startflink.sh
- flink 容器启动后,进程需要5分钟左右才会启动完成
- 停止 flink 命令:
docker stack rm flink
-
进入 minio 容器创建 flink 所需 bucket
docker exec -it flink-minio bash
mc alias set myminio http://127.0.0.1:9000 mdstorage eBxExGQJNhGosgv5FQJiVNqH
mc mb myminio/mdoc