docker-compose部署Flink及Dinky

docker-compose部署Flink及Dinky

服务器环境:centos7

1. 配置hosts

vim /etc/hostsx.x.x.x jobmanager
x.x.x.x taskmanager
x.x.x.x dinky-mysql

2. 文件目录结构

.
├── conf
│   ├── JobManager
│   │   ├── flink-conf.yaml
│   │   ├── log4j-cli.properties
│   │   ├── log4j-console.properties
│   │   ├── log4j.properties
│   │   ├── log4j-session.properties
│   │   ├── logback-console.xml
│   │   ├── logback-session.xml
│   │   ├── logback.xml
│   │   ├── masters
│   │   ├── workers
│   │   └── zoo.cfg
│   └── TaskManager
│       ├── flink-conf.yaml
│       ├── log4j-cli.properties
│       ├── log4j-console.properties
│       ├── log4j.properties
│       ├── log4j-session.properties
│       ├── logback-console.xml
│       ├── logback-session.xml
│       ├── logback.xml
│       ├── masters
│       ├── workers
│       └── zoo.cfg
├── dinky
│   ├── config
│   │   └── application.yml
│   └── lib
├── dinky-mysql
│   ├── conf
│   │   └── my.cnf
│   └── data
├── docker-compose-flink-dinky.yml
├── jar
├── plugins
└── sql

说明:

(建议第一次启动容器时不映射配置文件及lib包路径,将默认的配置文件和lib包复制到宿主机后,第二次启动时再映射配置文件及lib包路径,方便后期功能扩展)

  1. flink/conf/JobManager/flink-conf.yaml - flink JobManager的配置文件
  2. flink/conf/TaskManager/flink-conf.yaml - flink TaskManager的配置文件
  3. flink/jar/ - JobManager和TaskManager的依赖包,映射容器内的/opt/flink/lib/ 目录。
  4. flink/dinky/config/application.yml - dinky的配置文件,可以配置连接的mysql库
  5. flink/dinky/lib/ - dinky的依赖包,映射容器内的/opt/dinky/lib/ 目录。
  6. flink/dinky-mysql/conf/my.cnf - dinky-mysql的配置文件,需配置 max_allowed_packet=1073741824,否则导入数据会失败。
  7. flink/dinky-mysql/data/ - dinky-mysql的数据映射目录

3. 创建容器

  1. docker-compose-flink-dinky.yml

    version: '3'
    services:jobmanager:image: flink:1.14.0-scala_2.12-java8container_name: jobmanagerhostname: jobmanagerexpose: - "6123"ports:- "48081:8081" # Flink Web UI- "6123:6123" # JobManager RPC- "6124:6124" # JobManager REST- "8082:8082" # Metrics- "6125:6125" # Blob Servercommand: jobmanagernetworks: - flink-netrestart: alwaysvolumes:- /opt/flink/conf/JobManager/:/opt/flink/conf/ #第一次启动不映射,将conf复制到宿主机后,第二次启动再映射- /opt/flink/jar/:/opt/flink/lib/ #第一次启动不映射,将lib复制到宿主机后,第二次启动再映射- /opt/flink/plugins/:/opt/flink/plugins/- /opt/flink/sql/:/opt/flink/sql/taskmanager:image: flink:1.14.0-scala_2.12-java8container_name: taskmanagerhostname: taskmanagerdepends_on:- jobmanagerscale: 1 # 可以根据需要增加 TaskManagers 的数量command: taskmanagernetworks:- flink-netrestart: alwaysenvironment:- JOB_MANAGER_RPC_ADDRESS=jobmanagervolumes:- /opt/flink/conf/TaskManager/:/opt/flink/conf/ #第一次启动不映射,将conf复制到宿主机后,第二次启动再映射- /opt/flink/jar/:/opt/flink/lib/ #第一次启动不映射,将lib复制到宿主机后,第二次启动再映射- /opt/flink/plugins/:/opt/flink/plugins/- /opt/flink/sql/:/opt/flink/sql/dinky:image: dinkydocker/dinky-standalone-server:0.7.0-flink14container_name: dinkyhostname: dinkyports:- "38081:8081"- "38888:8888"networks:- flink-netrestart: alwaysenvironment:- SPRING_PROFILES_ACTIVE=prod- MYSQL_HOST=dinky-mysql- MYSQL_PORT=33306- MYSQL_DATABASE=dlink- MYSQL_USERNAME=dlink- MYSQL_PASSWORD=dlinkdepends_on:- dinky-mysqlvolumes:- /opt/flink/dinky/config/application.yml:/opt/dinky/config/application.yml #第一次启动不映射,将application.yml复制到宿主机后,第二次启动再映射- /opt/flink/dinky/lib/:/opt/dinky/lib/ #第一次启动不映射,将lib复制到宿主机后,第二次启动再映射dinky-mysql: image: dinkydocker/dinky-mysql-server:0.7.0container_name: dinky-mysqlhostname: dinky-mysqlports:- "33306:3306"networks:- flink-netrestart: alwaysenvironment:- MYSQL_ROOT_PASSWORD=dlink- MYSQL_DATABASE=dlinkvolumes:- /opt/flink/dinky-mysql/data/:/var/lib/mysql/- /opt/flink/dinky-mysql/conf/:/etc/mysql/conf.d/networks:flink-net:driver: bridge
    
  2. 创建容器

    docker-compose -f docker-compose-flink-dinky.yml up -d
    

    如果创建容器时,报错 iptables: No chain/target/match by that name. 需开启防火墙(systemctl start firewalld)

  3. 查看容器状态

    如果容器都是up状态,但是web页面访问不到,注意一下两点:

    1. 防火墙是否关闭,或开放指定端口
    2. 进入docker 容器的logs目录下查看日志

4. web访问验证

  1. flink:http://ip:48081/
    在这里插入图片描述

  2. dinky:http://ip:38888/

    用户名/密码:admin/admin
    在这里插入图片描述

5. Dinky 配置及测试

5.1 配置flink实例

在 dinky --> 注册中心 --> 集群管理 --> Flink实例管理 中配置 flink的JobManager地址

在这里插入图片描述

5.2 执行sql

  1. 在测试数据库创建数据表user_source 和 target_source

  2. 在dinky创建sql并执行

    -- 创建源表映射语句
    DROP TABLE if exists user_source_1;
    CREATE TABLE  IF NOT EXISTS user_source_1 (`id` STRING,`name` STRING,`age` INT
    ) WITH ('connector' = 'jdbc','url' = 'jdbc:mysql://ip:3306/test_database?characterEncoding=UTF-8&allowMultiQueries=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true','table-name' = 'user_source','username' = 'root','password' = '123456'
    );-- 创建目标表映射语句
    DROP TABLE if exists user_target_1;
    CREATE TABLE  IF NOT EXISTS user_target_1 (`id` STRING,`name` STRING,`age` INT
    ) WITH ('connector' = 'jdbc','url' = 'jdbc:mysql://ip:3306/test_database?characterEncoding=UTF-8&allowMultiQueries=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true','table-name' = 'user_target','username' = 'root','password' = '123456'
    );-- 同步数据语句
    insert into user_target_1 select * from user_source_1;
    
  3. 配置执行模式,并执行sql。执行完成后在flink管理页面也可以看到执行的sql任务

    在这里插入图片描述

  4. 如果在执行sql过程中有下面报错,是因为缺少对应的jar包,需要将包传入dinky的lib目录

    Caused by: org.apache.flink.table.api.ValidationException: Cannot discover a connector using option: 'connector'='jdbc'
    at org.apache.flink.table.factories.FactoryUtil.enrichNoMatchingConnectorError(FactoryUtil.java:587)
    at org.apache.flink.table.factories.FactoryUtil.getDynamicTableFactory(FactoryUtil.java:561)
    at org.apache.flink.table.factories.FactoryUtil.createTableSource(FactoryUtil.java:146)
    ... 112 more
    Caused by: org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'jdbc' that implements 'org.apache.flink.table.factories.DynamicTableFactory' in the classpath.
    Available factory identifiers are:
    blackhole
    datagen
    filesystem
    print
    at org.apache.flink.table.factories.FactoryUtil.discoverFactory(FactoryUtil.java:399)
    at org.apache.flink.table.factories.FactoryUtil.enrichNoMatchingConnectorError(FactoryUtil.java:583)
    ... 114 more
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 Redis 内存碎片及其清理方法

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站:…

Appium+python自动化(二十三)- 真假美猴王Monkeyrunner与Monkey傻傻的分不清楚(超详解)

简介 看《西游记》第五十七回,说是“六耳猕猴”化作孙悟空的摸样,伤了唐僧,后又和孙悟空大打出手…… 这位假孙悟空,实力不用多说了吧,和真孙悟空一般无二,大战孙悟空,闹到上天入地下海。 在唐僧…

HTML、JavaScript连接MySQL数据库以及对数据库的表进行修改

要使用HTML和JavaScript连接到MySQL数据库并进行表的修改,通常需要使用一个后端服务器来处理数据库的连接和操作,因为HTML和JavaScript在浏览器中运行,不适合直接连接数据库。常用的后端服务器语言包括Node.js、PHP、Python等。这里我们将使用…

服装连锁企业批发零售一体化解决方案

在现代商业环境中,服装连锁企业面临着市场竞争激烈、消费者需求多样化和供应链复杂化的挑战。为了有效应对这些挑战,建立一体化的批发零售解决方案已成为提升运营效率、优化客户体验的关键举措。这种解决方案不仅整合了进销存管理,还有效整合…

Kotlin设计模式:工厂方法详解

Kotlin设计模式:工厂方法详解 工厂方法模式(Factory Method Pattern)在Kotlin中是一种常见的设计模式,用于将对象创建的责任委派给单一的方法。本文将详细讲解这一模式的目的、实现方法以及使用场景,并通过具体的示例…

核心原因:如果互联网设计师是青春饭,为何别人的青春那么久?

大家好,我是大千UI工场,从事UI设计和前端开发快10年了,算是老司机,经常看到UI设计师在群里抱怨,说这行是青春饭,干几年就换行,真相是这样吗? 一、互联网设计师相较于传统设计师 互…

ventoy制作PE盘系统镜像安装盘,别再用什么软碟通UltraISO刻录进贼慢的U盘里做系统了。

还用U盘呢,10块钱傲腾读取900MB/sNVMe硬盘盒30多块钱,别再用什么软碟通UltraISO刻录进贼慢的U盘里做系统了。 官方下载地址:https://www.ventoy.net/cn/download.html 下载对应版本 运行Ventory2Disk.exe自动识别你的移动介质,然…

LeetCode 100344. 使二进制数组全部等于 1 的最少操作次数 I

更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡,更多解法等你一起来参与哦! LeetCode 100344. 使二进制数组全部等于 1 的最少操作次数 I,难度中等。 暴力 解题思路:因为是任意连续三个元素&#xff…

Kotlin设计模式:深入理解桥接模式

Kotlin设计模式:深入理解桥接模式 在软件开发中,随着系统需求的不断增长和变化,类的职责可能会变得越来越复杂,导致代码难以维护和扩展。桥接模式(Bridge Pattern)是一种结构型设计模式,它通过…

kubectl 用--patch动态修改k8s的资源

用diff格式修改 在 kubectl 命令中使用 --patch 参数是一种对 Kubernetes 资源进行部分更新的便捷方法。当你想要动态地修改资源(例如自定义资源定义 CRD 实例)的某些字段而无需获取和编辑整个资源定义时,这个方法尤其有用。 下面是使用 ku…

Elasticsearch 高频面试题

Elasticsearch 初级面试题及解答 1. 什么是 Elasticsearch?它的主要用途是什么? 解答: Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它能够快速存储、搜索和分析大量数据。Elasticsearch 的主要用…

SVN学习(001 svn安装)

尚硅谷SVN高级教程(svn操作详解) 总时长 4:53:00 共72P 此文章包含第1p-第p19的内容 介绍 为什么使用版本控制工具 版本控制工具的功能 版本控制简介 客户端服务器结构 c/s结构 服务端的结构: 服务程序 、版本库(存放我们上传的文件) 客户端的三个基本操作&#…

基于Java少儿编程管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

chatTTS 最强文字转语音模型本地部署!

今天本地部署了下传说中的语音合成大模型chatTTS,合成效果非常不错,比市面上其他工具合成的感情更丰富,语气更自然一些,一起来听听。 英文: React apps are made out of components. A component is a piece of the UI…

Games101 正交投影矩阵推导

目录 正交投影 投影矩阵推导 正交投影 正交投影不管是远处还是近处,都是直接挤在屏幕上就好,它没有近大远小的效果 首先,把相机放在原点上,往-z方向看,上方向是y; 这样摆放相机的好处是,把…

实际中服务器无法访问排查思路

当所有服务器突然无法被用户访问,终端用户也无法ping通服务器,这种情况非常棘手。 1.初步检查 首先,不要急于重启设备。你需要保持冷静,系统性地排查问题。尝试使用同一网段的PC访问服务器。如果可以访问,说明服务器和…

Prometheus问题合集

基础知识 1.什么是Prometheus?它的核心功能是什么? 指标收集:Prometheus通过拉取方式定期从目标系统(如服务器、容器、数据库等)收集指标数据。这些指标可以是系统的性能指标、应用程序的指标、或者是自定义的业务指…

环境搭建---nginx

nginx离线安装 下载地址:https://nginx.org/download/ 一、安装编译工具及库文件 [rootVM-20-14-centos ~]# yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel二、安装 PCRE [rootVM-20-14-centos ~]# tar -zxvf pcre-8.35.tar.gz [r…

操作数据库的SQL语句

这里有一些测试操作MySQL数据库的SQL语句,可以用来创建表、插入数据、查询数据、更新数据和删除数据: 1. 创建表 创建一个名为test_table的表,包含id、name和age三个字段。 CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR…

GPT-5:人工智能的新篇章,未来已来

目录 GPT-5:人工智能的新篇章,未来已来 引言 1.人工智能的快速发展和对现代社会的影响 2.OpenAI首席技术官米拉穆拉蒂关于GPT-5发布的消息 3.GPT-5对AI领域的潜在影响和期待 4.迎接GPT-5时代的准备 方向一:GPT-5技术突破预测 1.1 GPT-…