Flink 实践教程 - 入门(4):读取 MySQL 数据写入到 ES
作者:腾讯云流计算 Oceanus 团队
流计算 Oceanus 简介
流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点的企业级实时大数据分析平台。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。本文将为您详细介绍如何使用 MySQL 接入数据,经过流计算 Oceanus 对数据进行处理分析(示例中采用小写转换函数对name字段进行了小写转换),最终将处理好的数据存入 Elasticsearch 中 。
前置准备
1. MySQL 集群准备
1.1 新建 MySQL 集群进入 MySQL 控制台[1],点击左上方【新建】创建集群。具体可参考官方文档 创建 mysql 实例[2]。在【数据库管理】> 【参数设置】中设置参数 binlog_row_image=FULL,便于使用 CDC(Capture Data Change)特性,实现数据的变更实时捕获。
1.2 准备数据
首先创建 testdb 库,并在 testdb 库中创建用户 user 表,并插入数据。user 表结构:
| 字段名 | 类型 | 含义 |
| user_id | int | 用户ID |
| user_name | varchar(50) | 用户名 |
| create_time | timestamp | 创建时间 |
在表中插入2条数据。
INSERT INTO `user` (`user_id`, `user_name`, `create_time`) VALUES (1001, '小明', '2021-10-01 00:00:00');
INSERT INTO `user` (`user_id`, `user_name`, `create_time`) VALUES (1002, 'TONY', '2021-10-02 00:00:00');
1.3 设置参数
点击实例 ID,在实例详情页面点击【数据库管理】进入【参数设置】面板,设置binlog_row_image=FULL来开启数据库变化的同步。
通过 MySQL 集成数据到流计算 Oceanus (Flink) 集群,可以使用 flink-connector-jdbc 或者 flink-connector-mysq-cdc。使用 MySQL-cdc 特性时,flink-connector-mysq-cdc 连接器需要设置 MySQL 数据库的参数 binlog_row_image=FULL。
2. 创建流计算 Oceanus 集群
进入流计算 Oceanus 控制台[3],点击左侧【集群管理】,点击左上方【创建集群】,具体可参考流计算 Oceanus 官方文档创建独享集群[4]。
创建流计算 Oceanus 集群和 MySQL 集群时所选 VPC 必须是同一 VPC。
3. 创建 Elasticsearch 集群
进入 Elasticsearch 控制台[5],点击左上方【新建】,创建 Elasticsearch 实例,具体操作请访问创建 Elasticsearch 集群[6]。
创建 ES 集群和流计算 Oceanus 集群时所选私有网络 VPC 必须是同一 VPC。
流计算 Oceanus 作业
1. 创建 Source
CREATE TABLE `user_source` (
`user_id` int,
`user_name` varchar(50),
PRIMARY KEY (`user_id`) NOT ENFORCED -- 如果要同步的数据库表定义了主键, 则这里也需要定义
) WITH (
'connector' = 'mysql-cdc', -- 必须为 'mysql-cdc'
'hostname' = '10.0.0.158', -- 数据库的 IP
'port' = '3306', -- 数据库的访问端口
'username' = 'root', -- 数据库访问的用户名(需要提供 SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT, SELECT, RELOAD 权限)
'password' = 'yourpassword', -- 数据库访问的密码
'database-name' = 'testdb', -- 需要同步的数据库
'table-name' = 'user' -- 需要同步的数据表名
);
2. 创建 Sink
-- Elasticsearch 只能作为数据目的表(Sink)写入
-- 参见 https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/connect.html#elasticsearch-connector CREATE TABLE es_sink (
`user_id` INT,
`user_name` VARCHAR
) WITH (
'connector.type' = 'elasticsearch', -- 输出到 Elasticsearch
'connector.version' = '6', -- 指定 Elasticsearch 的版本, 例如 '6', '7'.
'connector.hosts' = 'http://10.0.0.175:9200',
'connector.index' = 'User',
'connector.document-type' = 'user',
'connector.username' = 'elastic',
'connector.password' = 'yourpassword', 'update-mode' = 'upsert', -- 捕捉数据库变化时,需使用 'upsert' 模式
'connector.key-delimiter' = '$', -- 可选参数, 复合主键的连接字符 (默认是 _ 符号)
'connector.key-null-literal' = 'n/a', -- 主键为 null 时的替代字符串,默认是 'null'
'connector.connection-max-retry-timeout' = '300', -- 每次请求的最大超时时间 (ms)
'format.type' = 'json' -- 输出数据格式, 目前只支持 'json'
);
3. 编写业务 SQL
insert into es_sink
(
select user_id,
LOWER(user_name) -- LOWER()函数会将用户名转换为小写
from user_source
);
4. 选择 Connector
点击【保存】>【发布草稿】运行作业。
请根据实际购买的 Elasticsearch 版本选择对应的 Connector ,1.13 版本之后无需选择可自动匹配 Connector。
5. 数据查询
进入 Elasticsearch 控制台[5],点击之前购买的 Elasticsearch 实例,点击右上角【Kibana】,进入 Kibana 查询数据。具体查询方法请参考通过 Kibana 访问集群[7]。
总结
本示例用 MySQL 连接器持续集成数据库数据变化记录,经过流计算 Oceanus 实现最基础的数据转换功能,最后 Sink 到Elasticsearch 中,用户无需提前在 Elasticsearch 中创建索引。另外,ES 作为Source/Sink , 使用时间戳 timestamp 类型字段时长度需指定,如:timestamp(3)
参考阅读
[1]: MySQL 控制台:https://console.cloud.tencent.com/cdb
[2]: 创建 mysql 实例:https://cloud.tencent.com/document/product/236/46433
[3]: 流计算 Oceanus 控制台:https://console.cloud.tencent.com/oceanus/overview
[4]: 创建 Oceanus 独享集群:https://cloud.tencent.com/document/product/849/48298
[5]: Elasticsearch 控制台:https://console.cloud.tencent.com/es
[6]: 创建 Elasticsearch 集群:https://cloud.tencent.com/document/product/845/19536
[7]: 通过 Kibana 访问集群:https://cloud.tencent.com/document/product/845/19541

关注“腾讯云大数据”公众号,技术交流、最新活动、服务专享一站 Get~

Flink 实践教程 - 入门(4):读取 MySQL 数据写入到 ES的更多相关文章
- Flink 实践教程-入门(8): 简单 ETL 作业
作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接.亚 ...
- Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)
1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...
- Spark使用Java读取mysql数据和保存数据到mysql
原文引自:http://blog.csdn.net/fengzhimohan/article/details/78471952 项目应用需要利用Spark读取mysql数据进行数据分析,然后将分析结果 ...
- 使用logstash拉取MySQL数据存储到es中的再次操作
使用情况说明: 已经使用logstash拉取MySQL数据存储到es中,es中也创建了相应的索引,也存储了数据.假若把这个索引给删除了,再次进行同步操作的话要咋做,从最开始的数据进行同步,而不是新增的 ...
- Elasticsearch准实时索引实现(数据写入到es分片并存储到文件中的过程)
溢写到文件系统缓存 当数据写入到ES分片时,会首先写入到内存中,然后通过内存的buffer生成一个segment,并刷到文件系统缓存中,数据可以被检索(注意不是直接刷到磁盘) ES中默认1秒,refr ...
- 关于C#读取MySql数据时,返回DataTable中某字段数据是System.Array[]形式
我在使用C#(VS2008)读取MySql数据库(5.1版本)时,返回的DataTable数据中arrivalDate字段数据显示为System.Array[]形式(程序中没有对返回的数据进行任何加工 ...
- Spark:读取mysql数据作为DataFrame
在日常工作中,有时候需要读取mysql的数据作为DataFrame数据源进行后期的Spark处理,Spark自带了一些方法供我们使用,读取mysql我们可以直接使用表的结构信息,而不需要自己再去定义每 ...
- Django读取Mysql数据并显示在前端
一.首先按添加网页的步骤添加网页,我的网页名为table.html, app名为web table.html放到相应目录下, froms文件提前写好 修改views.py ? 1 2 3 4 5 6 ...
- Openxml入门---Openxm读取Excel数据
Openxml读取Excel数据: 有些问题,如果当Cell 里面是 日期和浮点型的话,对应的Cell.DataType==Null,对应的时间会转换为一个浮点型,对于这块可以通过DateTime.F ...
随机推荐
- Elasticsearch6.8.6版本 在head插件中 对数据的增删改操作
一.访问ES方法:http://IP:PORT/ 一.创建索引:head插件创建索引的实例:在"索引"-"新建索引"中创建索引名称,默认了分片与副本情况: 直接 ...
- 自制Chrome扩展插件:用于重定向js
前言 作为一个前端开发, 在调试生产环境的代码时,是否苦于生产环境代码被压缩,没有sourcemap? 有没有想过将生产环境的js直接重定向为本地开发环境的js? 玩微前端时,有没有想过用本地的子应用 ...
- git 操作 :从远程仓库gitLab上拉取指定分支到本地仓库;git如何利用分支进行多人开发 ;多人合作代码提交实践
例如:将gitLab 上的dev分支拉取到本地 git checkout -b dev origin/dev 在本地创建分支dev并切换到该分支 git pull origin dev 就可以把git ...
- vue1.0,2.0区别 生命周期
1.生命周期 删除 beforeCompile compiled ready,新增beforeMounted mounted beforeUpdate updated 2.for循环里取消了$ind ...
- 配置Nginx和php-fpm用Sock套接字连接时,找不到php-fpm.sock的原因
php5.3之后的版本,php-fpm.conf里的listen的默认配置是127.0.0.1:9000,就不会生成php-fpm.sock,因此如果需要Nginx里的配置有链接tmp/php-fpm ...
- 鸿蒙内核源码分析(调度机制篇) | 任务是如何被调度执行的 | 百篇博客分析OpenHarmony源码 | v7.07
百篇博客系列篇.本篇为: v07.xx 鸿蒙内核源码分析(调度机制篇) | 任务是如何被调度执行的 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调 ...
- sonar入门
一.Sonar是什么? 根据我的了解,可以说Sonar包含三个部分: SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码味道.它可以与您现有的工作流程集成,以实现跨项目分支和提 ...
- .NET 开发一个服务器 应用管理工具
一:背景 1.Anno.Deploy Anno.Deploy可以和 Anno集成使用,用于部署新的服务.启动服务.停止服务.清理服务.也可以单独使用,用于守护程序. 使用方法 1.和Anno集成使用 ...
- 微信小程序_快速入门02
01我们学习了环境的准备和简单的demo,现在是时候来学习简单的页面编写了,首先我们来学习一些常用的基础标签: 一.view盒子,就是类似于div的盒子,可以用来存其他元素的容器. 二.text 文本 ...
- 小数的十进制和二进数转换 “无限不循环”小数的IEEE 754表示
十进制 -> 二进制 将整数部分和小数部分分开处理 例:3.125(10) 其整数部分为11(2) 小数部分按照下面的步骤求解: 0.125 x 2 = 0.25 取0 0.250 x 2 = ...