前言
最近flink已经变得比较流行了,所以大家要了解flink并且使用flink。现在最流行的实时计算应该就是flink了,它具有了流计算和批处理功能。它可以处理有界数据和无界数据,也就是可以处理永远生产的数据。具体的细节我们不讨论,我们直接搭建一个flink功能。总体的思路是source -> transform -> sink,即从source获取相应的数据来源,然后进行数据转换,将数据从比较乱的格式,转换成我们需要的格式,转换处理后,然后进行sink功能,也就是将数据写入到相应的db里边或文件中用于存储和展现。
环境准备
我们需要下载flink,kafka,mysql, zookeeper。我直接下载了tar或tgz包,然后解压。下载好flink之后,然后启动一下,比如我下载了flink-1.9.1-bin-scala_2.11.tgz,然后解压一下。
tar -zxvf flink-1.9.1-bin-scala_2.11.tgz
cd flink-1.9.1
./bin/start-cluster.sh
启动好了之后访问 http://localhost:8081 ,会看到截图。
下载zookeeper,解压之后,复制zookeeper/conf下的zoo_sample.cfg, 然后启动,命令如下,zookeeper是和kafka结合使用的,因为kafka要监听和发现所有broker的。
cp zoo_sample.cfg zoo.cfg
cd ../
./bin/zkServer.sh start
接下来下载kafka和启动, 创建一个User的topic,由一个partition和一个备份构成。
./bin/kafka-server-start.sh config/server.properties
./bin/kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic user
mysql大家可以自行安装了,安装好之后可以在数据库里创建一张表。
CREATE TABLE `user` (
`id` mediumint NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`age` int(11) DEFAULT NULL,
`createDate` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
编码
前面讲那么多都是环境准备工作,接下来才是激动人心的时刻----编码
- 创建Java的Maven工程,导入依赖包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.flinkdemo</groupId>
<artifactId>flinkdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<!--这个两个要匹配start-->
<flink.version>1.7.2</flink.version>
<binary.version>2.11</binary.version>
<!--这个两个要匹配end-->
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<lombok.version>1.16.2</lombok.version>
<junit.version>4.12</junit.version>
<mysql.version>8.0.16</mysql.version>
<druid.version>1.1.20</druid.version>
<slf4j.verison>1.7.30</slf4j.verison>
<zookeeper.version>3.4.10</zookeeper.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka-0.10_${binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>
<!--
<dependency>
<groupId>org.apache.kafka</groupId>