Flink介绍

Flink介绍

【摘要】 摘来自《Flink原理、实战与性能优化》 一书,作者是张利兵 。

1.1 Apache Flink是什么?

       在当代数据量激增的时代,各种业务场景都有大量的业务数据产生,对于这些不断产生的数据应该如何进行有效的处理,成为当下大多数公司所面临的问题。随着雅虎对hadoop的开源,越来越多的大数据处理技术开始涌入人们的视线,例如目前比较流行的大数据处理引擎Apache Spark,基本上已经取代了MapReduce成为当前大数据处理的标准。但是随着数据的不断增长,新技术的不断发展,人们逐渐意识到对实时数据处理的重要性。相对于传统的数据处理模式,流式数据处理有着更高的处理效率和成本控制能力。Flink 就是近年来在开源社区不断发展的技术中的能够同时支持高吞吐、低延迟、高性能的分布式处理框架。

1.2 为什么会是Flink

       Flink通过实现Google Dataflow流式计算模型实现了高吞吐、低延迟、高性能兼具实时流式计算框架。同时Flink支持高度容错的状态管理,防止状态在计算过程中因为系统异常而出现丢失,Flink周期性地通过分布式快照技术Checkpoints实现状态的持久化维护,使得即使在系统停机或者异常的情况下都能计算出正确的结果。

       Flink的具体优势有以下几点。

(1)同时支持高吞吐、低延迟、高性能

Flink是目前开源社区中唯一一套集高吞吐、低延迟、高性能三者于一身的分布式流式数据处理框架。像Apache Spark也只能兼顾高吞吐和高性能特性主要因为在Spark Streaming流式计算中无法做到低延迟保障;而流式计算框架Apache Storm只能支持低延迟和高性能特性,但是无法满足高吞吐的要求。而满足高吞吐、低延迟、高性能这三个目标对分布式流式计算框架来说是非常重要的。

(2)支持事件时间(

### Flink CDC 的概念 Flink CDC (Change Data Capture) 是一种用于实时捕获数据库变更的技术,能够将这些变更加入到流处理框架中进行进一步的处理和分析[^1]。具体来说,Flink CDC 可以监听 MySQL 或其他支持的日志记录系统中的变化事件,并将其转换成可以被 Apache Flink 处理的数据流。 这种机制允许开发者构建低延迟的应用程序来响应最新的业务活动,而无需等待批量加载过程完成。它特别适用于需要及时反映最新状态更新场景下的应用开发工作。 ### 使用教程 #### 准备环境 为了使 Flink 能够读取来自 MySQL 数据库的变化日志,在配置 MySQL 实例时需确保已启用 binlog 功能并设置相应的参数: ```bash vim /etc/my.cnf ---------------------------------- [mysqld] # 开启 binlog 并指定二进制日志文件前缀 log-bin=mysql-bin # 集群备份恢复需要每台机器有唯一的 ID server-id=1 # 执行哪些库开启 binlog【库名DATABASE_NAME】 binlog-do-db=flink_cdc ---------------------------------- systemctl restart mysqld ``` 上述命令会修改 MySQL 的配置文件 `/etc/my.cnf` 来启动 binlog 日志功能,并针对特定数据库 `flink_cdc` 启用此特性[^4]。 #### 创建项目依赖 接下来创建一个新的 Maven 工程并将必要的依赖项加入 pom.xml 文件内: ```xml <dependencies> <!-- Flink dependencies --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>${flink.version}</version> </dependency> <!-- Flink CDC Connectors dependency --> <dependency> <groupId>com.ververica</groupId> <artifactId>flink-connector-mysql-cdc</artifactId> <version>${cdc.connector.version}</version> </dependency> ... </dependencies> ``` 这里引入了两个主要组件:一个是核心的 Flink 流处理 API;另一个则是专门用来连接 MySQL 进行 CDC 操作的插件。 #### 编写代码实现逻辑 下面是一段简单的 Java 代码片段展示如何利用 Flink CDC Connector 对 MySQL 表执行变更捕捉操作: ```java import com.alibaba.ververica.cdc.connectors.mysql.MySqlSource; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; public class MysqlCdcExample { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); MySqlSource<String> mySqlSource = MySqlSource.<String>builder() .hostname("localhost") .port(3306) .databaseList("flink_cdc") // 监听哪个数据库 .tableList("flink_cdc.inventory.products") // 监听哪张表 .username("root") .password("your_password_here") .deserializer(new JsonDeserializationSchema()) // 自定义反序列化器 .build(); env.fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source") .print(); // 输出结果至控制台 env.execute("FlinkCDC Example"); } } ``` 这段代码展示了怎样建立一个基本的任务流程,其中包含了从 MySQL 中获取增量数据并通过打印的方式输出给用户查看的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值