乐趣区

关于Flink:带你详解数栈FlinkX实时采集原理与使用

一、FlinkX 实时采集性能的根本介绍

首先为大家介绍下 FlinkX 实时模块的分类,如下图所示:

1、实时采集模块 (CDC)

1)MySQL Binlog 插件

利用阿里开源的 Canal 组件实时从 MySQL 中捕捉变更数据。

2)PostgreSQL Wal 插件

PostgreSQL 实时采集是基于 PostgreSQL 的逻辑复制以及逻辑解码性能来实现的。逻辑复制同步数据的原理是,在 Wal 日志产生的数据库上,由逻辑解析模块对 Wal 日志进行初步的解析, 它的解析后果为 ReorderBufferChange(能够简略了解为 HeapTupleData),再由 Pgoutput Plugin 对两头后果进行过滤和音讯化拼接后,而后将其发送到订阅端,订阅端通过逻辑解码性能进行解析。

2、音讯队列

1)Kafka:Kafka 插件存在四个版本,依据 Kafka 版本的不同,插件名称也略有不同。具体对应关系如下表所示:

2)EMQX:EMQX 是一款齐全开源,高度可伸缩,高可用的分布式 MQTT 音讯服务器,实用于 IoT、M2M 和挪动应用程序,可解决千万级别的并发客户端。

3、距离轮询

RDB 类型插件的应用限度:

 只有 RDB 类型的 reader 插件反对距离轮询
轮询字段只能为数值类型或者工夫类型
轮询字段只能为间断递增且不反复

4、其余

Hive 插件: Hive 插件只有写入插件,性能基于 HDFS 的写入插件实现,也就是说从实时采集插件读取,写入 Hive 也反对失败复原的性能。

二、Binlog 实时采集原理

1、什么是 Binlog

MySQL 的二进制日志 Binlog 能够说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查问语句 Select、Show 等),以事件模式记录,还蕴含语句所执行的耗费的工夫,MySQL 的二进制日志是事务平安型的,Binlog 的次要目标是复制和复原。

2、Binlog 插件基本原理

实时采集插件的外围是如何实时捕捉数据库数据的变更,对于 MySQL 数据库而言,阿里开源的 Canal 曾经很好的帮咱们实现了基于 MySQL 数据库增量日志解析,提供增量数据订阅和生产性能。因而这里咱们间接用 Canal 捕捉 MySQL 数据库数据的变更信息,基于 FlinkX 框架将工作简化成脚本的配置,基于 Flink 的 Checkpoint 机制提供了工作的故障复原,进步了工作的容错性。

根本步骤如下:

 工作启动时启动 Canal 线程
Canal 模仿 MySQL slave 的交互协定,假装本人为 MySQL slave,向 MySQL master 发送 dump 协定
MySQL master 收到 dump 申请,开始推送 Binary Log 给 slave(即 Canal)
Canal 解析 Binary Log 对象 (原始为 Byte 流)
FlinkX 获取 Canal 解析后的对象做二次解析,封装后发送至上游数据源

三、Binlog 到 Hive 实战

1、环境筹备:确认数据库开启了 Binlog

show variables like ‘%log_bin%’;

2、建表

CREATE TABLE `kudu` (`id` bigint(11) NOT NULL AUTO_INCREMENT,  
  `user_id` bigint(11) DEFAULT NULL,  
  `name` varchar(255) DEFAULT NULL,  
  PRIMARY KEY (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

本文首发于:数栈研习社

数栈是一站式的数据中台 PaaS,FlinkX 这个我的项目咱们也在 github 社区上开源了,大家如果有想法和趣味欢送来撩~

对于 FlinkX 的基础知识,咱们还做了系列视频:
https://www.bilibili.com/vide…

退出移动版