拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Pathway 用 Docker 部署指南:从单容器运行到 pathway spawn 多进程多线程并行

Pathway 用 Docker 部署指南从单容器运行到 pathway spawn 多进程多线程并行【免费下载链接】pathwayPython ETL framework for stream processing, real-time analytics, LLM pipelines, and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pathway本文基于 Pathway 官方开发者文档中“Docker Deployment”一章系统讲解如何用 Docker 容器化部署 Pathway Live Data Framework 项目包括基于官方镜像 pathwaycom/pathway 编写 Dockerfile、用pathway spawn启动多进程/多线程作业、直接运行单脚本以及基于标准 Python 镜像通过 pip 安装框架的替代方案。读完本文你可以独立完成一个 Pathway 应用的镜像构建、运行与并发参数调优并复现仓库中的真实日志监控示例。为什么选择 Docker 部署Pathway 官方文档明确指出Pathway 框架本身就是以容器化方式部署为目标设计的meant to be deployed in a containerized manner。单机部署可以直接用 Docker 完成并且作业可以借助多进程或多线程并发跑满多个 CPU 核心。选择线程还是进程取决于计算负载的性质线程间通信更快对 I/O 密集型或底层用 Rust 计算的作业多线程往往更划算Python 密集型负载可能需要多进程以绕过 GIL全局解释器锁的限制。Pathway 为此提供了pathway spawn命令一条命令即可拉起多进程、多线程作业这与下文“多进程多线程”一节对应。此外还有一个重要前提值得强调原文档引言部分Pathway 完全兼容 Python任何现成的 Python 部署方式都可以照搬——这就是后文“用标准 Python 镜像”方案存在的原因。前置条件开始部署前确认系统已安装 Docker。官方文档引用了 Docker 引擎安装指南Docker Installation Guide。安装完成后可用docker --version验证。若作业涉及多容器编排如接入 Kafka还需要 Docker Compose。方案一基于 Pathway 官方镜像构建镜像官方镜像pathwaycom/pathway已包含运行框架所需的全部依赖。在 Dockerfile 中用FROM指定该镜像即可FROM pathwaycom/pathway:latest # Set working directory WORKDIR /app # Copy requirements file and install dependencies COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt # Copy the rest of the application code COPY . . # Command to run the Pathway script CMD [ python, ./your-script.py ]注意Pathway 官方镜像“已经包含运行 Pathway 应用所需的一切”。如果你的项目没有使用 Pathway 以外的其他库requirements.txt这一步可以省略。构建并运行镜像docker build -t my-pathway-app . docker run -it --rm --name my-pathway-app my-pathway-app方案二用 pathway spawn 启用多线程与多进程Pathway 提供 CLIpython/pathway/cli.py中的 click 命令组来管理并发。官方文档给出的用法是把 Dockerfile 里的启动命令CMD [ python, ./your-script.py ]替换为CMD [pathway, spawn, --processes, 2, --threads, 3, python, ./your-script.py]即以2 个进程、每进程 3 个线程共 6 个 worker运行应用。结合 python/pathway/cli.py 的源码可以把pathway spawn的完整参数面讲清楚参数默认值说明-t, --threads1每个进程内的线程数最小为 1-n, --processes1进程数与--addresses互斥--first-port10000进程间通信使用的起始端口设置--addresses时被忽略--addresses无跨机器部署用的host:port逗号分隔列表进程数由列表长度推断-pi, --process-id无当前机器上进程的下标使用--addresses时必填--record/--record-path关闭 /record在输入连接器处录制数据保存目录由--record-path指定--repository-url/--branch无从 GitHub 仓库直接拉取程序运行时的仓库路径与分支参数校验逻辑在 python/pathway/cli.py 的validate_and_resolve_spawn_args中--threads与--processes均不得小于 1--processes与--addresses互斥--first-port加上进程数不能超过最大端口号。底层实现上create_process_handles会为每个子进程注入一组环境变量python/pathway/cli.py 中可以看到PATHWAY_THREADS线程数PATHWAY_PROCESSES进程数PATHWAY_FIRST_PORT或跨机模式下的PATHWAY_ADDRESSES进程间通信地址PATHWAY_RUN_ID、PATHWAY_START_TIMESTAMP_MS同一次运行的所有进程共享同一批次的启动时间戳保证初始快照的时间基准一致。此外从源码结构看spawn_program中还实现了动态扩缩容运行期间可按UPSCALING_FACTOR/DOWNSCALING_FACTOR调整进程数并重新拉起子进程见 python/pathway/cli.py。这意味着pathway spawn拉起的不只是静态并发而是一个可以随负载伸缩的进程池——这在容器内长驻运行的场景下尤其有价值。方案三不写 Dockerfile直接运行单个 Python 脚本对于单文件项目创建完整 Dockerfile 可能显得多余。官方文档给出的做法是直接挂载当前目录并运行脚本注意这里挂载的是$PWD到/appdocker run -it --rm --name my-pathway-app -v $PWD:/app pathwaycom/pathway:latest python my-pathway-app.py这条命令适合快速验证不需要构建镜像改完脚本重跑容器即可。若需要并发同样可以把末尾的python my-pathway-app.py换成pathway spawn --processes 2 --threads 3 python my-pathway-app.py。方案四标准 Python 镜像 pip 安装如果团队已有成熟的 Python 镜像与部署流水线Pathway 完全可以像普通 Python 库一样被安装。官方文档给出的 DockerfileFROM --platformlinux/x86_64 python:3.10 # Set working directory WORKDIR /app # Copy requirements file and install dependencies COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt # Copy the rest of the application code COPY . . # Command to run the Pathway script CMD [ python, ./your-script.py ]两个硬性兼容性约束原文档明确警示Pathway 不支持 Windows要求 Python3.10出于兼容性考虑应使用x86_64 架构的 Linux 容器与 Python 3.10 镜像即FROM --platformlinux/x86_64。其余流程与官方镜像方案相同docker build -t my-pathway-app .然后docker run -it --rm --name my-pathway-app my-pathway-app只是需要确保requirements.txt中列有pathway依赖。仓库中真实的示例镜像正是这种写法realtime-log-monitoring 的 pathway 容器 Dockerfile 使用FROM --platformlinux/x86_64 python:3.10随后pip install -U pathway及项目其他依赖最后以CMD [python, -u, alerts.py]启动-u保证日志无缓冲输出方便容器场景观察。实战示例Docker 编排的实时日志监控官方文档将 Realtime Server Log Monitoring 作为 Docker 部署的完整示例。该项目把 Filebeat 通过 Kafka 接入 Pathway并把告警推送到 Slack由四个容器组成Filebeat生成并监控日志写入 KafkaKafka 与 Zookeeper充当 Filebeat 与 Pathway 之间的消息网关Pathway从 Kafka 消费日志处理后发送 Slack 告警。处理逻辑位于 alerts.py从 Filebeat 生成的 JSON 消息中提取时间戳与日志内容将 ISO8601 格式时间戳转换为真实时间戳仅保留最近 X 秒默认 1 秒的消息当前时间取最后一条日志的时间戳若消息数超过 Y 条默认 5 条则输出alertTrue。编排定义在 docker-compose.yml 中filebeat与pathway两个服务分别以各自的本地 Dockerfile 构建context: .kafka使用confluentinc/cp-enterprise-kafka:5.5.3并依赖zookeeperpathway服务depends_on: [filebeat]。运行方式见 Makefilemake # 等价于 docker compose up -d启动全部容器 make connect # docker compose exec filebeat bash进入 Filebeat 容器 ./generate_input_stream.sh # 在 Filebeat 容器内启动日志流生成 make connect-pathway # docker compose exec pathway bash make stop # docker compose down -vREADME 还给出了调试技巧在alerts.py中加一行pw.io.csv.write(log_table, ./logs.csv)然后在 pathway 容器内cat logs.csv即可查看处理后的日志表。同一目录下还有 logstash-pathway-elastic 变体展示用 Logstash Elasticsearch 替换 Filebeat Slack 的同类拓扑。进一步扩展上云与监控单机 Docker 之外原文档指出若要横向扩展 Pathway 应用可以参考专门的云部署文档 cloud-deployment。本仓库同目录下还有 GCP、AWS Fargate、Azure ACI、Render、Nebius 等具体云平台的部署文档以及 from-jupyter-to-deploy 这类从 Jupyter 原型到容器化生产的完整过渡示例对应仓库示例 examples/projects/from_jupyter_to_deploy。仓库中还有多个可直接参考的生产级 Dockerfile如 kafka-ETL、debezium-postgres-example、aws-fargate-deploy 与 azure-aci-deploy。小结Pathway 官方推荐容器化部署单机用 Docker并发用pathway spawn的多进程/多线程组合优先使用pathwaycom/pathway官方镜像自带全部依赖无第三方依赖时可省略requirements.txt需要兼容既有 Python 流水线时用linux/x86_64 Python 3.10 镜像并pip install pathway并发参数默认 1 进程 × 1 线程进程间默认从端口 10000 起通信Python 密集负载优先多进程绕开 GIL通信密集负载可优先多线程完整可运行的多容器示例见 examples/projects/realtime-log-monitoring可直接make复现。【免费下载链接】pathwayPython ETL framework for stream processing, real-time analytics, LLM pipelines, and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pathway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门