docker服务容器化
docker服务容器化
- 1 引言
- 2 多个容器间网络联通
- 2.1 单独创建关联
- 2.2 创建时关联
- 3 服务搭建
- 3.1 镜像清单
- 3.2 容器创建
- 4 联合实战
- 4.2 flink_sql之kafka到starrocks
- 4.2 flink_sql之mysql到starrocks
- 5 文献借鉴
1 引言
利用docker可以很效率地搭建服务,本文在win10下安装docker-desktop,从镜像的拉取,到容器的创建,最后容器间联合使用,该过程有很多细节,记录和分享在这里,共勉。
2 多个容器间网络联通
在docker中可以创建网络,作为容器间网络联通媒介,网络联通有下面两种方式,首先需要创建网络:
# 创建网络名为flink-network的网络
docker network create flink-network# 查看网络内的容器信息:
docker network inspect flink-network
2.1 单独创建关联
容器已经创建,但是没有关联网络,需要单独创建关联时
# 这里假设已经创建容器starrocks,关联上已创建的网络flink-network
docker network connect flink-network starrocks
2.2 创建时关联
如果网络已经创建,容器未创建,则可以在创建容器时直接关联网络,如已创建上面的网络flink-network,下面打算创建starrocks容器时
# 已创建上面的网络flink-network,下面打算创建starrocks容器时
docker run -p 19030:9030 -p 18030:8030 -p 18040:8040 \
-itd --name starrocks \
--network flink-network \
starrocks/allin1-ubuntu:3.1.10
# 在运行命令中添加已存在网络flink-network --network flink-network
可以查看网络内的容器信息
# 查看网络内的容器信息:
docker network inspect flink-network
3 服务搭建
3.1 镜像清单
我们这里搭建kafka-flink-starrocks的项目服务,以starrocks作为数仓,mysql和redis为业务库,flink和kafka进行CDC和ETL。
repository | tag | siz |
---|---|---|
starrocks/allin1-ubuntu | 3.1.10 | 4.37GB |
flink | 1.13.5 | 625MB |
zookeeper | 3.4.13 | 150MB |
wurstmeister/kafka | 2.13-2.8.1 | 468MB |
mysql | 8.0.19 | 546MB |
redis | 6.0.8 | 104MB |
3.2 容器创建
1)首先,创建starrocks容器,外部挂载磁盘位置E:\tmp\docker_volumes\starrocks\data
# 挂载容器外部磁盘/文件夹「启动」,
docker run -itd --name starrocks \
--network flink-network \
-v E:\tmp\docker_volumes\starrocks\data:/home/zzz/data
-p 19030:9030 -p 18030:8030 -p 18040:8040
starrocks/allin1-ubuntu:3.1.10
# 启动SQL client(Connect to StarRocks with a SQL client)
docker exec -it starrocks \
mysql -P 9030 -h 127.0.0.1 -u root -p 123456 --prompt="StarRocks > "
# 在容器内部,查看fe、be状态
show proc '/frontends' \G
show proc '/backends' \G
2)然后,创建flink容器,JobManager和TaskManager都有创建
# 创建 JobManager docker run \-itd \--name=jobmanager \--publish 8081:8081 \--network flink-network \--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \flink:1.13.5 jobmanager # 创建 TaskManager docker run \-itd \--name=taskmanager \--network flink-network \--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \flink:1.13.5 taskmanager # 从https://mvnrepository.com/检索下面jar包 添加jar到flink/lib/目录
# 在宿主机保存jar包路径下运行下面命令
docker cp flink-sql-connector-mysql-cdc-2.0.2.jar jobmanager:/opt/flink/lib/
docker cp flink-sql-connector-mysql-cdc-2.0.2.jar taskmanager:/opt/flink/lib/docker cp flink-connector-starrocks-1.1.14_flink-1.13_2.11.jar jobmanager:/opt/flink/lib/
docker cp flink-connector-starrocks-1.1.14_flink-1.13_2.11.jar taskmanager:/opt/flink/lib/docker cp flink-connector-jdbc_2.11-1.13.5.jar jobmanager:/opt/flink/lib/
docker cp flink-connector-jdbc_2.11-1.13.5.jar taskmanager:/opt/flink/lib/docker cp flink-sql-connector-kafka_2.11-1.13.5.jar jobmanager:/opt/flink/lib/
docker cp flink-sql-connector-kafka_2.11-1.13.5.jar taskmanager:/opt/flink/lib/
3)创建zookeeper和kafka容器
# 安装zk
docker run -d --restart=always \
-e ALLOW_ANONYMOUS_LOGIN=yes \
--log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=2 \
--name zookeeper \
--network flink-network \
-p 2181:2181 \
-v E:\tmp\docker_volumes\zookeeper\localtime:/etc/localtime zookeeper:3.4.13# 安装kafka 需要注意的时 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:宿主机ip:9092
docker run -d --name kafka \
--network flink-network \
--log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=2 \
-p 9092:9092 \
--link zookeeper:zookeeper \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181/kafka \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://宿主机ip:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
wurstmeister/kafka:2.13-2.8.1# 运行kafka交换命令行
docker exec -it kafka /bin/bash
- 创建容器mysql和redis,(本人虽然创建了,但是使用的本地的客户端)
4 联合实战
4.2 flink_sql之kafka到starrocks
1)kafka数据准备
# 进入kafka交互命令行
docker exec -it kafka /bin/bash# 在容器内,创建主题user 这里容器主机ip是zk容器的ip
./kafka-topics.sh --zookeeper 容器主机ip:2181/kafka --create --replication-factor 1 --partitions 1 --topic user# 创建生产者 容器主机ip是kafka容器的ip
./kafka-console-producer.sh --broker-list 容器主机ip:9092 --topic user# 创建消费者 容器主机ip是kafka容器的ip
./kafka-console-consumer.sh --topic user --from-beginning --bootstrap-server 容器主机ip:9092
2)starrocks数据准备
# 使用dbeaver客户端,或者进入starrocks容器
# 启动SQL client(Connect to StarRocks with a SQL client)
docker exec -it starrocks \
mysql -P 9030 -h 127.0.0.1 -u root -p 123456 --prompt="StarRocks > "# 创建主键模型表 s_user
CREATE TABLE IF NOT EXISTS `s_user` (`id` int(10) NOT NULL COMMENT "",`name` varchar(20) NOT NULL COMMENT "",`p_id` INT(2) NULL COMMENT ""
)
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 1
PROPERTIES (
"replication_num" = "1"
);
- flink_sql准备
# 进入flink容器交互命令行
docker exec -it jobmanager /bin/bash# 在容器内容运行,进入bin路径
cd opt/flink/bin
# 在bin路径下运行flink_sql客户端
sql-client.sh# 可以查看是否有表
show tables;# 创建source源表 source_Kafka_user
CREATE TABLE source_Kafka_user(id INT,name STRING,p_id INT
) WITH ('connector' = 'kafka','topic' = 'user','properties.bootstrap.servers' = 'kafka容器ip:9092','properties.group.id' = 'source_user','scan.startup.mode' = 'earliest-offset','format' = 'csv'
);# 创建Sink目标表,sink_starrocks_suser
CREATE TABLE sink_starrocks_suser (id INT,name STRING,p_id INT,PRIMARY KEY (id) NOT ENFORCED
)WITH ('connector' = 'starrocks','jdbc-url'='jdbc:mysql://starrocks容器ip:9030','load-url'='starrocks容器ip:8040','database-name' = 'my_test_db','table-name' = 's_user','username' = 'root','password' = '123456','sink.buffer-flush.interval-ms' = '5000','sink.properties.column_separator' = '\x01','sink.properties.row_delimiter' = '\x02'
);# 在flink_sql创建ETL命令,实时运行
insert into sink_starrocks_suser select id,name,p_id from source_Kafka_user;
可以在flinkUI:http://localhost:8081/查看任务运行详情
4.2 flink_sql之mysql到starrocks
- mysql数据准备
CREATE TABLE `s_user` (`id` INT(11) NOT NULL,`name` VARCHAR(32) DEFAULT NULL,`p_id` INT(2) DEFAULT NULL,PRIMARY KEY (`id`)
);insert into s_user values(10086,'lm',61),(10010, 'ls',11), (10000,'ll',61);
2)starrocks数据准备: 和上面一样
- flink_sql准备
# 创建source源表 source_mysql_suser
CREATE TABLE source_mysql_suser (id INT,name STRING,p_id INT,PRIMARY KEY (id) NOT ENFORCED
)WITH ('connector' = 'jdbc','driver'='com.mysql.jdbc.Driver','url' = 'jdbc:mysql:/宿主机ip:3306/flink_pro','table-name' = 's_user','username' = 'root','password' = '123456'
);# 创建Sink目标表,sink_starrocks_suser
CREATE TABLE sink_starrocks_suser (id INT,name STRING,p_id INT,PRIMARY KEY (id) NOT ENFORCED
)WITH ('connector' = 'starrocks','jdbc-url'='jdbc:mysql://starrocks容器ip:9030','load-url'='starrocks容器ip:8040','database-name' = 'my_test_db','table-name' = 's_user','username' = 'root','password' = '123456','sink.buffer-flush.interval-ms' = '5000','sink.properties.column_separator' = '\x01','sink.properties.row_delimiter' = '\x02'
);# 在flink_sql创建ETL命令,实时运行
insert into sink_starrocks_suser select id,name,p_id from source_mysql_suser;
5 文献借鉴
StarRocks数据导入–Flink Connector与CDC秒级数据同步
相关文章:

docker服务容器化
docker服务容器化 1 引言2 多个容器间网络联通2.1 单独创建关联2.2 创建时关联 3 服务搭建3.1 镜像清单3.2 容器创建 4 联合实战4.2 flink_sql之kafka到starrocks4.2 flink_sql之mysql到starrocks 5 文献借鉴 1 引言 利用docker可以很效率地搭建服务,本文在win1…...

【QT】控件8
1.QDial 通过调节旋钮位置来控制窗口的不透明度: void Widget::on_dial_valueChanged(int value) {qDebug()<<value;this->setWindowOpacity((double)value/100); }效果演示: 2.Date/Time Edit 计算两个日期的差值 ui界面设计 计算按钮按下…...
漫谈推理谬误——错误因果
相关文章 漫谈推理谬误——错误假设-CSDN博客文章浏览阅读736次,点赞22次,收藏3次。在日常生活中,我们会面临各种逻辑推理,有些看起来一目了然,有些非常的科学严谨,但也有很多似是而非,隐藏了陷…...
【数据结构】队列实现剖析:掌握队列的底层实现
在计算机科学中,**队列(Queue)**是一种常见的数据结构,它遵循先进先出(FIFO,First In First Out)的原则。队列的应用非常广泛,例如任务调度、资源管理、进程通信等。本篇文章旨在为计…...
【C++】IO库(二):文件输入输出
8.2 文件输入输出 头文件 fstream 定义了三个类型来之支持文件IO,分别是: ifstream:从一个给定文件读取数据;ofstream:向一个给定文件写入数据;fstream:读写给定文件。 在 C 当中,…...

105.【C语言】数据结构之二叉树求总节点和第K层节点的个数
目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…...

力扣637. 二叉树的层平均值
给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 提示: 树中节点数量在 [1, 104] 范围内-231 < Node.val < 231 - 1 代码: /*** Definition for a binary tree node.* stru…...

【前端】Next.js 服务器端渲染(SSR)与客户端渲染(CSR)的最佳实践
关于Next.js 服务器端渲染(SSR)与客户端渲染(CSR)的实践内容方面,我们按下面几点进行阐述。 1. 原理 服务器端渲染 (SSR): 在服务器上生成完整的HTML页面,然后发送给客户端。这使得用户在首次访问时能够…...

路径规划之启发式算法之一:A-Star(A*)算法
A*算法是一种启发式搜索算法,常用于解决路径规划问题。 一、A*算法的定义与原理 A*算法是一种用于在图形或网格中查找最短路径的算法。它在搜索过程中综合考虑了每个节点的实际距离(g值)和预估距离(h值),以…...

Android复习代码1-4章
public class RudioButton extends AppCompatActivity {Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_rudio_button);// 找到RadioGroup和TextView的实例RadioGroup radioGrou…...

【问题】webdriver.Chrome()设置参数executable_path报不存在
场景1: 标红报错unresolved reference executable_path 场景2: 执行报错TypeError: __init__() got an unexpected keyword argument executable_path 原因: 上述两种场景是因为selenium4开始不再支持某些初始化参数。比如executable_path 解决: 方案…...

win10系统安装docker-desktop
1、开启Hyper-v ———————————————— Hyper-V 是微软提供的一种虚拟化技术,它允许你在同一台物理计算机上运行多个独立的操作系统实例。这种技术主要用于开发、测试、以及服务器虚拟化等领域。 —————————————————————— &#…...

小程序-基于java+SpringBoot+Vue的乡村研学旅行平台设计与实现
项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:…...
组件A底部栏(position: fixed )事件使用$emit更新内容失败bug解决
今天遇到一个很离奇的bug,记录一下 问题:在组件内底部栏使用$emit触发按钮事件但打印出来的值是初始化的值,更新的值被重置导致更新失败 原因:组件内底部使用了 position: fixed; 固定, 导致组件内插槽 this 与 保存按…...

数据结构——排序第三幕(深究快排(非递归实现)、快排的优化、内省排序,排序总结)超详细!!!!
文章目录 前言一、非递归实现快排二、快排的优化版本三、内省排序四、排序算法复杂度以及稳定性的分析总结 前言 继上一篇博客基于递归的方式学习了快速排序和归并排序 今天我们来深究快速排序,使用栈的数据结构非递归实现快排,优化快排(三路…...
C++的类功能整合
1. 类的基本概念 类是面向对象编程的核心,它封装了数据和操作数据的函数。 #include <iostream> using namespace std;class MyClass { public:int publicData;void publicFunction() {cout << "Public function" << endl;}private:i…...

《String类》
目录 一、定义与概述 二、创建字符串对象 2.1 直接赋值 2.2 使用构造函数 三、字符串的不可变性 四、常用方法 4.1 String对象的比较 4.1.1 比较是否引用同一个对象 4.1.2 boolean equals(Object anObject)方法:按照字典序比较 4.1.3 int compareTo(Strin…...
【docker】docker的起源与容器的由来、docker容器的隔离机制
Docker 的起源与容器的由来 1. 虚拟机的局限:容器的需求萌芽 在 Docker 出现之前,开发和部署软件主要依赖虚拟机(VMs): 虚拟机通过模拟硬件运行操作系统,每个应用程序可以运行在自己的独立环境中。虽然虚…...

Window 安装 Nginx
参考链接 Windows 环境nginx安装使用及目录结构详解_windows 安装nginx-CSDN博客 Nginx 安装及配置教程(Windows)【安装】_nginx下载安装-CSDN博客 安装 1)下载 nginx: download 2)解压 3)启动 3.1)方…...
replace (regexp|substr, newSubstr|function)替换字符串中的指定部分
replace 方法用于替换字符串中的指定部分。它可以接受一个子字符串或正则表达式作为第一个参数,第二个参数是替换的内容。 用法示例 基本替换 let str "Hello, world!"; let newStr str.replace("world", "everyone"); console.lo…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...