Apache Flink是新一代的分布式流式数据处理框架,它统一的处理引擎既可以处理批数据(batch data)也可以处理流式数据(streaming data)。在实际场景中,Flink利用Apache Kafka作为上下游的输入输出十分常见,本文将给出一个可运行的实际例子来集成两者。
1. 目标
本例模拟中将集成Kafka与Flink:Flink实时从Kafka中获取消息,每隔10秒去统计机器当前可用的内存数并将结果写入到本地文件中。
2. 环境准备
Apache Kafka 0.11.0.0
Apache Flink 1.3.1
Gradle 3.5 (版本号不是强要求)
本例运行在Windows环境,但可以很容易地移植到其他平台上。
3. 创建Flink Streaming工程
本例使用Intellij IDEA作为项目开发的IDE。首先创建Gradle project,group为'huxihx.flink.demo',artifact id为‘flink-kafka-demo’,version为‘1.0-SNAPSHOT’。整个项目结构如图所示:
4. 增加kafka和kafka-connector依赖
增加下列gradle依赖:
compile group: 'org.apache.flink', name: 'flink-connector-kafka-0.10_2.11', version: '1.3.1'
compile group: 'org.apache.flink', name: 'flink-streaming-java_2.11', version: '1.3.1'
compile group: 'org.apache.kafka', name: 'kafka-clients', version: '0.11.0.0'
设置gradle打包依赖
jar {
manifest {
attributes(
"Manifest-Version": 1.0,
"Main-Class": "huxihx.KafkaMessageStreaming")
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
into('assets') {
from 'assets'
}
}
5. 启动Flink环境(本例使用local测试环境)
F:\SourceCode\flink-1.3.1> bin\start-local.bat
Starting Flink job manager. Webinterface by default on http://localhost:8081/.
Don't close this bat