玩转Flink流批一体计算引擎

目录

Flink简介

Flink能干啥

流式分析

数据管道&ETL

事件驱动应用

无缝集成

数据源管理

简化Flink SQL

极简数据管道


Flink简介

Flink是一个优秀的流式处理引擎,不仅拥有完善的流式处理解决方案,而且将批处理视为有界流,完美实现了流批处理一体化。

Flink能干啥

流式分析

Flink可持续不断地处理事件流,并明确支持以下三种时间语义:

  • 事件时间(event time): 事件产生的时间,记录的是设备生产(或者存储)事件的时间;
  • 摄取时间(ingestion time): Flink 读取事件时记录的时间;
  • 处理时间(processing time): Flink pipeline 中具体算子处理事件的时间。

值得一提的是Flink的DataStream API和Table API & SQL均可支持这三种语义。

数据管道&ETL

Flink擅长ETL(抽取、转换、加载)管道任务,从一个或多个数据源获取数据,再进行一些信息补充和转换操作,最后将结果存储起来。除了使用常见的DataStream API来实现这些功能之外,还可以使用Table API & SQL来实现。

事件驱动应用

通过处理函数(ProcessFunction)将事件处理与时钟(Timer)、状态(State)相结合,可以构建强大的流处理应用,从而实现逻辑复杂的事件驱动应用。

典型的事件驱动类应用有:

  1. 欺诈检测(Fraud detection)
  2. 异常检测(Anomaly detection)
  3. 基于规则的告警(Rule-based alerting)
  4. 业务流程监控(Business process monitoring)
  5. Web应用程序(社交网络)

通常而言,通过Flink的Table API & SQL就可以实现常见的流式分析、数据管道&ETL和事件驱动应用。由于SQL是一种高级开发语言,比DataStream API要简单很多,且可维护性很高。因此,如果对Flink的Table API & SQL做一些抽象化封装,必然可以极大提高开发效率。基于此,flink-jobs便应运而生。

flink-jobs为基于Flink的Java应用程序提供快速集成的能力,可通过继承FlinkJobsRunner快速构建基于Java的Flink流批一体应用程序。flink-jobs提供了数据源管理模块,通过flink-jobs运行Flink SQL会变得极其简单。而通过使用flink-jobs-launcher,可以实现基于Java API启动flink-jobs应用程序,将flink任务通过XML配置文件来实现。

无缝集成

通过flink-jobs-launcher(与flink-jobs配套的开源Flink作业启动框架)可将flink快速集成到现有基于Java实现的系统中。通过XML格式的任务配置文件,更能带领开发者玩转Flink SQL。借助于flink-jobs-launcher,配置Flink作业变得极其简单(通过serviceName可实现应用的模块化管理):



启动作业直接使用Java语言编程即可:

FlinkJobs flinkJobs = XMLConfigLoader.getInstance()
		.load("\r\n" + 
			"\r\n" + 
        		"");
CommandLineFlinkJobsLauncher flinkJobsLauncher = new CommandLineFlinkJobsLauncher();
flinkJobsLauncher.setFlinkHome("/opt/flink-1.13.1");
flinkJobsLauncher.setAction(Action.RUN);
FlinkJobsApplicationInfo appInfo = flinkJobsLauncher.launch(flinkJobs);

数据源管理

将Flink SQL的数据源通过配置文件统一管理,避免开发者反复拼写过多无用配置信息:

#FlinkSQL数据源配置
#Debezium
#配置名称为kafka的数据源
datasource.kafka.connector=kafka
datasource.kafka.properties.bootstrap.servers=192.168.1.101:9092,192.168.1.102:9092,192.168.1.103:9092
datasource.kafka.properties.group.id=flink-jobs
datasource.kafka.scan.startup.mode=earliest-offset
datasource.kafka.format=debezium-json
datasource.kafka.debezium-json.schema-include=true

#PostgreSQL
#配置名称为bidb的数据源
datasource.bidb.connector=jdbc
datasource.bidb.driver=org.postgresql.Driver
datasource.bidb.url=jdbc:postgresql://192.168.1.104:5432/bidb
datasource.bidb.username=your_name
datasource.bidb.password=your_password

#引用配置文件内的另一个配置
#配置名称为syndb的数据源
datasource.syndb.connector=${datasource.bidb.connector}
datasource.syndb.driver=${datasource.bidb.driver}
datasource.syndb.url=${datasource.bidb.url}?currentSchema=syndb
datasource.syndb.username=${datasource.bidb.username}
datasource.syndb.password=${datasource.bidb.password}

#MySQL
#配置名称为kaorder的数据源
datasource.kaorder.connector=jdbc
datasource.kaorder.driver=com.mysql.cj.jdbc.Driver
datasource.kaorder.url=jdbc:mysql://192.168.1.105:3306/kaorder?useSSL=false&serverTimezone=Asia/Shanghai
datasource.kaorder.username=your_name
datasource.kaorder.password=your_password

#SQLServer
#配置名称为sqltool的数据源
datasource.sqltool.connector=jdbc
datasource.sqltool.driver=org.postgresql.Driver
datasource.sqltool.url=jdbc:sqlserver://192.168.1.106:1433;DatabaseName=sqltool;
datasource.sqltool.username=your_name
datasource.sqltool.password=your_password

#Hive
#配置名称为hivedb的数据源
datasource.hivedb.type=hive
datasource.hivedb.default-database=default
datasource.hivedb.hive-conf-dir=/etc/hive/conf

简化Flink SQL

运行Flink SQL不需要传递过多的数据源配置信息,还可以使用动态SQL和传参( 基于DSL,一个动态脚本解析框架实现),并通过XML配置文件轻松描述Flink SQL任务:



	CREATE TABLE books (id BIGINT NOT NULL, title STRING, authors STRING, `year` INT, PRIMARY KEY (id) NOT ENFORCED)
	CREATE TABLE books_sum (`year` INT NOT NULL, `count` BIGINT,  PRIMARY KEY (`year`) NOT ENFORCED)
	INSERT INTO books_sum (`year`, `count`) SELECT `year`, count(*) FROM books GROUP BY `year`

极简数据管道

通过封装的数据同步(data-sync)功能,可以快速实现数据管道服务。



	
		
		
		TO_TIMESTAMP(FROM_UNIXTIME(UPDATE_TIME/1000, 'yyyy-MM-dd HH:mm:ss'))
		
	

详情见:https://gitee.com/tenmg/flink-jobs

你可能感兴趣的:(flink,流处理,大数据,实时大数据,etl)