一、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…