跳到主要内容

如何将 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 微服务调整

Flink 服务需要访问 MinIO、Kafka、MongoDB 服务,这时需要映射出 HAP 单机模式存储组件容器中的这三个服务访问端口,如果 HAP 为集群模式则不需要调整。

请参考以下配置示例,修改 docker-compose.yaml 文件

  1. 添加 MinIO、Kafka 和 MongoDB 的服务端口映射

    聚合表功能需要 Flink 能够访问 MongoDB 服务,如果不启用聚合表功能则可以不映射 MongoDB 端口。

    如果需要映射出 MongoDB 端口,单机模式内置的的 MongoDB 默认未开启认证,操作前请仔细阅读关于 数据安全 的文档。

  2. 配置 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 重启微服务生效

  1. 初始化 swarm 环境

    docker swarm init
  2. 创建目录

    mkdir -p /data/hap/script/volume/data
  3. 下载 flink 镜像(离线包下载

    docker pull nocoly/hap-flink:1.17.1.530
  4. 创建配置文件

    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
  5. 配置启动脚本

    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
  6. 启动数据集成服务

    bash /data/hap/script/startflink.sh
    • flink 容器启动后,进程需要5分钟左右才会启动完成
    • 停止 flink 命令: docker stack rm flink