利用docker-compose来搭建flink集群
1.前期准备
(1)把docker,docker-compose,kafka集群安装配置好
参考文章:
利用docker搭建kafka集群并且进行相应的实践-CSDN博客
这篇文章里面有另外两篇文章的链接,点进去就能够看到
(2)最好把Finalshell也下载好,具体下载教程详见如下文章:
保姆级教程下载finalshell以及连接云服务器基础的使用教程_finalshell下载安装-CSDN博客
(3)最好把docker的镜像源换一下
vi /etc/docker/daemon.json
把里面原来的镜像源全部删掉,换成下面的镜像源(何驰给我的)
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com","https://docker-proxy.741001.xyz","https://registry.docker-cn.com"]
}
保存并且退出,查看一下
docker info
[root@node1 ~]# docker info
Client: Docker Engine - CommunityVersion: 26.1.4Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.14.1Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.27.1Path: /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 3Running: 0Paused: 0Stopped: 3Images: 2Server Version: 26.1.4Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueUsing metacopy: falseNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 runcDefault Runtime: runcInit Binary: docker-initcontainerd version: d2d58213f83a351ca8f528a95fbd145f5654e957runc version: v1.1.12-0-g51d5e94init version: de40ad0Security Options:seccompProfile: builtinKernel Version: 3.10.0-1160.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 3.682GiBName: node1ID: eb6f4510-9e84-4973-aad6-39e9ecce6034Docker Root Dir: /var/lib/dockerDebug Mode: falseExperimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors:http://hub-mirror.c.163.com/https://mirror.ccs.tencentyun.com/https://docker-proxy.741001.xyz/https://registry.docker-cn.com/Live Restore Enabled: false
2.利用docker-compose配置flink集群 (一直在node1的root用户下进行)
(1)编写flink.yml文件,输入以下代码
mkdir -p /export/server
cd /export/server
vi flink.yml
添加以下内容
version: '3'
services:jobmanager:image: flink:latestcontainer_name: jobmanagerhostname: jobmanagerports:- "8081:8081"command: jobmanagerenvironment:- JOB_MANAGER_RPC_ADDRESS=jobmanagernetworks:- flink_networktaskmanager:image: flink:latestdepends_on:- jobmanagerports:- "8082-8084:8081" # 确保端口范围足够command: taskmanagerscale: 3 # 设置TaskManager的数量为3environment:- JOB_MANAGER_RPC_ADDRESS=jobmanagernetworks:- flink_network
networks: #注意这里,要跟services配置项目对齐(即平级的意思)flink_network:driver: bridge
(2)使用如下命令启动集群(记得先启动docker),同时查看集群运行状态:
systemctl start docker
docker-compose -f flink.yml up -d
docker ps
效果如下
[root@node1 server]# systemctl start docker
[root@node1 server]# docker-compose -f flink.yml up -d
/usr/local/lib/python3.6/site-packages/paramiko/transport.py:32: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography. The next release of cryptography will remove support for Python 3.6.from cryptography.hazmat.backends import default_backend
Creating network "server_flink_network" with driver "bridge"
WARNING: Found orphan containers (kafka2, kafka1, kafka3) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Pulling jobmanager (flink:latest)...
latest: Pulling from library/flink
6414378b6477: Pull complete
2c9f253e30bf: Pull complete
65c8233e39bf: Pull complete
b59d22db63f3: Pull complete
b80a9c727cee: Pull complete
da3337ead35a: Pull complete
53e543b721f9: Pull complete
ecebf073acfb: Pull complete
21be4ec89742: Pull complete
f71629a01e27: Pull complete
cc4f5f48c9f1: Pull complete
Digest: sha256:2ec7f6d5591444334f63b66ddd49c7ae02551cb0a27c0988790fa43caa49716f
Status: Downloaded newer image for flink:latest
Creating jobmanager ... done
WARNING: The "taskmanager" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Creating server_taskmanager_1 ... done
Creating server_taskmanager_2 ... done
Creating server_taskmanager_3 ... done
[root@node1 server]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e908f25d0df5 flink:latest "/docker-entrypoint.…" 6 seconds ago Up 2 seconds 6123/tcp, 0.0.0.0:8084->8081/tcp, :::8084->8081/tcp server_taskmanager_1
8ebe74a4481a flink:latest "/docker-entrypoint.…" 6 seconds ago Up 2 seconds 6123/tcp, 0.0.0.0:8083->8081/tcp, :::8083->8081/tcp server_taskmanager_2
11936734f5cf flink:latest "/docker-entrypoint.…" 6 seconds ago Up 3 seconds 6123/tcp, 0.0.0.0:8082->8081/tcp, :::8082->8081/tcp server_taskmanager_3
e053c7560ee9 flink:latest "/docker-entrypoint.…" 8 seconds ago Up 6 seconds 6123/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp jobmanager
[root@node1 server]#
成功后在网页上面输入node1:8081进入这个网站(有时候因为网络不好会进入不了这个网站)

然后就ok了!
(3)关闭flink集群代码
docker-compose -f flink.yml down
效果如下
[root@node1 server]# docker-compose -f flink.yml down
/usr/local/lib/python3.6/site-packages/paramiko/transport.py:32: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography. The next release of cryptography will remove support for Python 3.6.from cryptography.hazmat.backends import default_backend
Stopping server_taskmanager_1 ... done
Stopping server_taskmanager_2 ... done
Stopping server_taskmanager_3 ... done
Stopping jobmanager ... done
WARNING: Found orphan containers (kafka2, kafka3, kafka1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Removing server_taskmanager_1 ... done
Removing server_taskmanager_2 ... done
Removing server_taskmanager_3 ... done
Removing jobmanager ... done
Removing network server_flink_network
[root@node1 server]#
3.参考文章:
(1)在linux虚拟机上面配置Docker时所踩过的坑_docker 20.10.6设置镜像源不生效-CSDN博客
(2)黑马大数据学习笔记4-Hive部署和基本操作_黑马大数据 hive笔记-CSDN博客
(3)ubuntu系统中使用docker-compose安装部署docker集群(本地)-CSDN博客
(4)利用docker搭建kafka集群并且进行相应的实践-CSDN博客
4.补充笔记
(1)如果使用docker拉取flink镜像的速度太慢,就可能是因为docker的镜像源太老旧了。
使用 Docker 拉取 Flink 镜像时,如果速度较慢,可能有以下几个原因:
### 1. **Docker Hub 服务器远程访问速度慢**
- 默认情况下,Docker 会从 Docker Hub 拉取镜像,而 Docker Hub 的服务器位于国外。如果你在中国或其他地区,可能会受到网络带宽限制,导致下载速度慢。
### 2. **网络带宽问题**
- 如果你的网络连接较慢,或者有网络拥塞、丢包等问题,都会导致拉取速度变慢。
### 3. **Docker 镜像源不稳定**
- Docker Hub 本身的服务器或某个镜像源可能出现故障或负载过高,导致访问速度下降。
### 4. **没有使用 Docker 镜像加速器**
- Docker 官方没有为国内用户提供快速的镜像下载服务,若未配置国内的 Docker 镜像加速器,下载速度会非常慢。
### 5. **镜像的大小**
- Flink 镜像可能相对较大,下载时需要更多的时间,尤其是没有进行增量拉取(如果镜像有很大变化,可能需要完整拉取)。
### 6. **镜像的标签(Tag)问题**
- 如果你指定的是一个较老或者不常用的镜像标签,可能会拉取到一些不常用的镜像版本,而这些镜像版本可能分布在不同的服务器节点上,导致拉取速度变慢。
---
### **解决办法:**
1. **使用国内镜像源**:
- 配置 Docker 镜像加速器,选择国内的 Docker 镜像源来加速下载速度。常见的加速器有:
- 网易云镜像:`http://hub-mirror.c.163.com`
- 腾讯云镜像:`https://mirror.ccs.tencentyun.com`
- 阿里云镜像:`https://registry.cn-hangzhou.aliyuncs.com`
- Docker 官方中国镜像:`https://registry.docker-cn.com`
2. **配置 Docker 镜像加速器**:
- 你可以在 Docker 配置文件 `/etc/docker/daemon.json` 中配置镜像加速器。例如:
```json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
]
}
```
- 然后重新启动 Docker 服务:
```bash
sudo systemctl restart docker
```
3. **选择合适的镜像标签**:
- 尽量选择较为稳定和常用的标签(如 `latest` 或特定版本标签),避免使用过时的标签。
4. **检查网络环境**:
- 检查你的网络连接是否稳定,并确保没有中间的网络限制或防火墙阻止访问 Docker Hub。
通过这些方法,你应该能够提高拉取 Flink 镜像的速度。
(2)docker ps和docker-compose ps区别是什么

`docker ps` 和 `docker-compose ps` 都用于查看容器的运行状态,但它们有一些重要的区别,主要体现在它们的使用场景和管理方式上。下面是详细的对比:
### 1. **`docker ps`**:
- **功能**:列出当前正在运行的 Docker 容器。
- **作用范围**:它只显示当前 Docker 主机上运行的容器,不依赖于 Docker Compose 配置。
- **默认显示内容**:默认显示容器的 ID、名称、镜像、命令、创建时间、状态、端口等信息。
- **适用场景**:当你使用 `docker` 命令直接管理容器时,使用 `docker ps` 查看容器的状态。例如,你直接使用 `docker run` 启动的容器。
#### 示例:
```bash
docker ps
```
输出示例:
```
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1234abcd5678 nginx "nginx -g 'daemon of…" 10 minutes ago Up 9 minutes 80/tcp hopeful_morse
```
- `docker ps` 只显示运行中的容器。如果你想查看所有容器(包括停止的容器),可以加上 `-a` 参数:
```bash
docker ps -a
```
### 2. **`docker-compose ps`**:
- **功能**:列出由 Docker Compose 管理的服务的容器状态。
- **作用范围**:它只显示当前在 Docker Compose 配置下运行的容器。Docker Compose 是一个工具,允许你通过 YAML 文件定义和运行多个 Docker 容器。
- **默认显示内容**:显示服务的状态、容器 ID、端口、以及服务名称等信息。
- **适用场景**:当你使用 Docker Compose 启动一组容器时,使用 `docker-compose ps` 查看这些容器的状态。
#### 示例:
```bash
docker-compose ps
```
输出示例:
```
Name Command State Ports
-----------------------------------------------------------------------------------
myapp_web_1 python app.py Up 3 minutes 0.0.0.0:5000->5000/tcp
myapp_db_1 docker-entrypoint.sh postgres Up 3 minutes 5432/tcp
```
- `docker-compose ps` 只显示通过当前目录下的 `docker-compose.yml` 文件管理的服务。
- 如果你需要查看所有容器的状态(包括停止的容器),可以加上 `-a` 参数:
```bash
docker-compose ps -a
```
### **主要区别**:
| **特性** | **`docker ps`** | **`docker-compose ps`** |
|-------------------------|------------------------------------------------------|----------------------------------------------------------|
| **管理对象** | Docker 容器(所有通过 Docker CLI 启动的容器) | Docker Compose 管理的服务容器(通过 `docker-compose` 启动的容器) |
| **查看范围** | 显示所有运行中的容器(不依赖于 Compose) | 仅显示通过 `docker-compose` 启动的容器 |
| **命令的作用对象** | 针对单个 Docker 容器的操作 | 针对一个或多个服务(服务是由 Compose 配置定义的) |
| **是否依赖 Docker Compose** | 否 | 是 |
| **常用场景** | 直接使用 `docker run` 启动的容器,或在没有 Compose 的情况下管理容器 | 使用 Docker Compose 管理多容器应用时,查看应用状态 |
### **总结**:
- 如果你只是想查看 Docker 主机上所有容器的状态,无论它们是通过 Docker 还是 Docker Compose 启动的,使用 `docker ps`。
- 如果你在使用 Docker Compose 管理一个多容器应用,并想查看这些容器的状态,使用 `docker-compose ps`。
相关文章:
利用docker-compose来搭建flink集群
1.前期准备 (1)把docker,docker-compose,kafka集群安装配置好 参考文章: 利用docker搭建kafka集群并且进行相应的实践-CSDN博客 这篇文章里面有另外两篇文章的链接,点进去就能够看到 (2&…...
力扣打卡10:K个一组翻转链表
链接:25. K 个一组翻转链表 - 力扣(LeetCode) 这道题需要在链表上,每k个为一组,翻转,链接。 乍一看好像比较容易,其实有很多细节。比如每一组反转后怎么找到上一组的新尾,怎么找到…...
深度学习详解
深度学习(Deep Learning,DL)是机器学习(Machine Learning,ML)中的一个子领域,利用多层次(深层)神经网络来自动从数据中提取特征和规律,模仿人脑的神经系统来进…...
鸿蒙分享(一):添加模块,修改app名称图标
码仓库:https://gitee.com/linguanzhong/share_harmonyos 鸿蒙api:12 新建公共模块common 在entry的oh-package.json5添加dependencies,引入common模块 "dependencies": {"common": "file:../common" } 修改app名称&…...
【Redis】not support: redis
1、查看redis进程 2、查看是否安装redis扩展,此处以宝塔为例...
【集群划分】含分布式光伏的配电网集群电压控制【33节点】
目录 主要内容 模型研究 1.节点电压灵敏度的计算 2.Kmeans聚类划分 3.集群K值 部分代码 运行结果 下载链接 主要内容 该程序参考文献《含分布式光伏的配电网集群划分和集群电压协调控制》,基于社团检测算法,实现基于电气距离和区域电压调节能…...
嵌入式蓝桥杯学习5 定时中断实现按键
Cubemx配置 打开cubemx。 前面的配置与前文一样,这里主要配置基本定时器的定时功能。 1.在Timer中点击TIM6,勾选activated。配置Parameter Settings中的预分频器(PSC)和计数器(auto-reload Register) 补…...
【Java】类似王者荣耀游戏
r77683962/WangZheYouDianRongYao 运行效果图: 类似王者荣耀游戏运行效果图_哔哩哔哩_bilibili...
C++<基本>:union是没有构造函数和析构函数的
今天发现当我在union中包含了多个结构体时,结构体有默认构造函数时,编译报错。 问题点: union不支持构造函数和析构函数union中的元素本身也是不支持构造函数和析构函数的。包含union的结构体也不支持构造函数和析构函数。 出错代码如下&a…...
SQL中IN和NOT操作符的用法
1. IN操作符(布尔逻辑) 在SQL中,IN 是一个用于检查某个字段值是否包含在给定的多个可能值中的布尔操作符。它经常与条件表达式一起使用,通常出现在WHERE子句中。 用法: IN操作符用来确定某个字段的值是否存在于给定…...
C++平常学习用的
4.1 友元函数 4.2 友元类 5.2 类模板 7.2 虚函数dynamic_cast运算 7.2 纯虚函数和抽象类...
JAVA |日常开发中Servlet详解
JAVA |日常开发中Servlet详解 前言一、Servlet 概述1.1 定义1.2 历史背景 二、Servlet 的生命周期2.1 加载和实例化2.2 初始化(init 方法)2.3 服务(service 方法)2.4 销毁(destroy 方法) 三、Se…...
QT实战--QTreeWidget实现两种行颜色+QListWidget样式
本文主要介绍了QTreeWidget实现两种行颜色、点击打开父节点以及设置父子节点之间距离,同时附带介绍了QListWidget样式 树效果图: 列表效果图: 1.树样式的实现 1)使用代码: m_pLeftTreeWidget = new QTreeWidget(this);m_pLeftTreeWidget->setObjectName("suolue_t…...
RPA在IT运维中的实践:自动化监控与维护
一、引言 1. IT运维面临的挑战与RPA的机遇 在IT运维领域,日常的监控、维护和故障响应等工作占据了大量的时间和资源。随着技术的发展,RPA技术提供了自动化这些重复性任务的可能性,从而释放IT团队的潜力,让他们能够专注于更复杂和…...
C# 设置方法执行超时,则执行下一个方法
最近在开发过程中遇到了一个问题,在进行通讯连接时,如果没有连接的话会延时几十秒,而且还设置不了连接超时时间,于是我就想着有没有一种可以判断这个方法的执行时间超过多少秒,就跳出执行其他方法,经过大量…...
【iOS】UIImagePickerController
【iOS】UIImagePickerController 前言 笔者简单学习了iOS开发如何调用本地的一个相册的内容,下面简单介绍一下相关内容。 介绍 UIImagePickerController是iOS平台上的一个类,用于在应用程序中访问设备的照片库、相机和视频录制功能。它提供了一个用户…...
现代企业营销模式创新:链动 2+1 模式 AI 智能名片商城小程序的应用与价值
摘要:本文旨在探讨现代企业面临的客户环境变化以及相应的营销模式变革需求,重点分析链动 21 模式 AI 智能名片商城小程序在满足现代企业营销沟通即时性、精准性、社会性和方便性要求方面的作用,并阐述其对企业在未来市场竞争中取得胜利的重要…...
springboot+Loki+Loki4j+Grafana搭建轻量级日志系统
文章目录 前言一、日志组件介绍 1.1 Loki组件1.2 Loki4j组件1.3 Grafana 二、组件下载安装运行 Loki下载安装运行Grafana下载安装运行 三、创建springboot项目总结 前言 日志在任何一个web应用中都是不可忽视的存在,它已经成为大部分系统的标准组成部分。搭建日志…...
服务器守护进程化
目录 一、守护进程的定义与特点 1、定义 2、特点 二、守护进程的原理 三、守护进程与会话(Session)的关系 四、C实现守护进程 守护进程(Daemon Process)是一个在后台运行、通常不与用户直接交互的进程。守护进程是操作系统中…...
灵途科技亮相2024世界传感器大会 分享光纤光源技术突破
12月1日至2日,2024世界传感器大会(WSS)在郑州国际会展中心隆重举办,泛自动驾驶领域光电感知专家灵途科技受邀参加“光纤传感器与激光雷达”分论坛,并在大会上带来《激光雷达用一体化光纤光源》专题演讲,同与…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

