40岁程序员学Flink,对接kafka

一,背景

公司需要用到flink和kafka来处理大数据,对于一个没有接触过这两个东西的40岁程序员,决定自学一下,用了两天的时间终于实现了flink和kafka的对接,目标就是要向kafka输入 "时间戳,温度,设备ID",然后在flink里面按照时间戳分组,再按照设备ID计算的在一个时间段内的温度平均值。

 

二,运行环境

window 10, kafka 2.1.1, flink 1.7.2, jdk8

 

三,准备步骤

1,在window下面运行kafka 2.1.1

    1) 启动zookeeper

     从网上下载,然后解压到某个文件夹,例如:C:\software\kafka_2.12-2.1.1\kafka_2.12-2.1.1

     进入cmd,进入C:\software\kafka_2.12-2.1.1\kafka_2.12-2.1.1\bin\windows目录,注意运行之前一定要修改zookeeper配置文件里面的 dataDir值,配置文件具体路径C:\software\kafka_2.12-2.1.1\kafka_2.12-2.1.1\config下面的zookeeper.properties,把该配置指到一个具体目录,我的设置如下图:

    在cmd执行如下命令 

     zookeeper-server-start.bat C:\software\kafka_2.12-2.1.1\kafka_2.12-2.1.1\config\zookeeper.properties,如果启动正常会看到下图红框的提示

2) 启动kafka

  开启一个新的cmd,同样进入  C:\software\kafka_2.12-2.1.1\kafka_2.12-2.1.1\bin\windows目录 ,注意运行之前一定要修改配置文件里面的 log.dirs,配置文件具体路径C:\software\kafka_2.12-2.1.1\kafka_2.12-2.1.1\config下面的server.properties,把该配置指到一个具体目录,我的设置如下图:

在cmd执行如下命令

kafka-server-start.bat C:\software\kafka_2.12-2.1.1\kafka_2.12-2.1.1\config\server.properties,如果启动正常会看到下图红框的提示

 

四,编码

1  编写发送信息到kafka的代码,这里我参考如下链接,直接用spring boot来发送信息到kafka,直接使用spring boot不需要考虑操作kafka的细节,spring boot已经帮你做好封装。

http://www.54tianzhisheng.cn/2018/01/05/SpringBoot-Kafka/

  具体修改了上面链接里面的  KafkaSender 里面的发送逻辑,修改了发送信息的格式,具体如下:

   String tempMessage= String.format("%d,%d,%s", System.currentTimeMillis(), ra.nextInt(), "test"+ra.nextInt(3));     

   log.info("+++++++++++++++++++++ message = {}", tempMessage);

    kafkaTemplate.send("temp", tempMessage);

2 编写对接kafka的flink接收代码

这部分的代码参考  Packt.Mastering.Apache.Flink 第2章,利用 flink-connector-kafka与kafka对接,该书可以百度下载,只是该书中用的是旧的包,本文把旧的包全部换成新的包,新包没有了之前类似 FlinkKafkaConsumer**的类,全部换成了统一的 FlinkKafkaConsumer

另外这里还是采用原文中提到的event time来作为聚合的标准,这里说一下我个人对event time和warter mark的理解

首先 ,event time 是发送来消息里面自带的时间,flink就是根据这个时间来对发送过来的信息进行分组,以这个时间作为依据,把信息分到不同的窗口里面进行汇总处理。

然后,由于不同类型的消息里面的event time格式不一样,所以需要统一生成一种flink能够理解的标记,这个标记就是warter mark。

不知道这样理解是否对,如果不对,还请高手指教

 

五 运行

整个项目分两部分,分别是 kafkasender 和 flinkreceiver

首先,运行 kafkasender里面的  KafkaApplication,具体运行结果如下图,可以看到程序每隔100毫秒就发送一次信息

 

 

接着,运行 flinkreceiver 里面的 FlinkReceiver,具体结果如下图,可以看到程序从kafka收到信息,然后在指定时间段内,按照设备ID计算温度的平均值

 

    本章源码可以参考 https://gitee.com/kengan/40_programmers_learn_flink.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值