前言
本例模拟中将集成Kafka与Flink:Flink实时从Kafka中获取消息,每隔10秒去统计机器当前可用的内存数并将结果写入到本地文件中。
环境准备
Apache Kafka 0.11.0.0
Apache Flink 1.3.1
Gradle 3.5 (版本号不是强要求)
本例运行在Windows环境,但可以很容易地移植到其他平台上。
创建Flink Streaming工程
本例使用Intellij IDEA作为项目开发的IDE。首先创建Gradle project,group为’huxihx.flink.demo’,artifact id为‘flink-kafka-demo’,version为‘1.0-SNAPSHOT’。整个项目结构如图所示:
代码开发
代码主要由两部分组成:
- MessageSplitter类、MessageWaterEmitter类和KafkaMessageStreaming类:Flink streaming实时处理Kafka消息类
- KafkaProducerTest类和MemoryUsageExtrator类:构建Kafka测试消息
本例中,Kafka消息格式固定为:时间戳,主机名,当前可用内存数。其中主机名固定设置为machine-1,而时间戳和当前可用内存数都是动态获取。由于本例只会启动一个Kafka producer来模拟单台机器发来的消息,因此在最终的统计结果中只会统计machine-1这一台机器的内存。下面我们先来看flink部分的代码实现。
- MessageSplitter类(将获取到的每条Kafka消息根据“,”分割取出其中的主机名和内存数信息)
public class MessageSplitter implements FlatMapFunction<String, Tuple2<String, Long>> {
@Override
public void flatMap(String value, Collector<Tuple2<String, Long>> out) throws Except