实现Windows环境下Flink消费Kafka热词统计示例过程

前言碎语

之前的博文写了实现了官方提供的最简单的单词计数功能,今天升级下,将数据源从socket流换成生产级的消息队列kafka来完成一样的单词计数功能。本文实现的重点主要有两个部分,一是kafka环境的搭建,二是如何使用官方提供的flink-connector-kafka_2.12来消费kafka消息,其他的逻辑部分和上文类似。

进入正题

本篇博文涉及到的软件工具以及下载地址:

apache flink :https://flink.apache.org/downloads.html ,请下载最新版1.7.x,选择单机版本

kafka:http://kafka.apache.org/downloads ,请下载最新的2.1.0

第一步:安装kafka,并验证 

从上面的下载地址选择二进制包下载后是个压缩包,解压后的目录如下:

进入bin\windows下,找到kafka-server-start.bat和zookeeper-server-start.bat。配置文件在config目录下,主要配置一些日志和kafka server和zookeeper,都默认就好。如果你本地已经有zk的环境,就可以忽略zk,不然安装下面的步骤执行即可。

1. 启动zk服务

执行:zookeeper-server-start.bat ..\..\config\zookeeper.properties

2.启动kafka服务

执行:kafka-server-start.bat ..\..\config\server.properties

3.创建test主题

执行:kafka-topics.bat –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic test

4.查看上一步的主题是否创建成功,成功的话控制台会输出test

执行:kafka-topics.bat –list –zookeeper localhost:2181

5.订阅test主题消息

执行:kafka-console-consumer.bat –bootstrap-server localhost:9092 –topic test –from-beginning

6.发布消息

执行:kafka-console-producer.bat –broker-list localhost:9092 –topic test

以上步骤成功后,我们需要验证下是否都成功了。在第六条指令的窗口中输入abc。如果在第5个指令窗口输出了就代表kafka环境ok了。然后可以关掉第5个指令窗口,下面就让flink来消费kafka的消息

第二步:编写消费kafka消息的flink job

基础步骤参考一文。唯一的区别就是因为要消费kafka中的数据,所以需要引入一个kafka连接器,官方已提供到maven仓库中,引入最新版本即可,如下:

然后新建一个kafkatoflink类 ,代码逻辑和昨天的一样,都是从一段字符串中统计每个词语出现的次数,这个场景比较像我们的热搜关键字,我标题简化为热词统计了。主要的代码如下:

注意下这个地方:parametertool.fromargs(args);我们所有的关于kafkaconsumerconfig的配置,都是通过启动参数传入的,然后flink提供了一个从args中获取参数的工具类。这里需要配置的就三个信息,和我们在命令窗口创建订阅一样的参数即可

第三步:验证flink job是否符合预期

将应用打成jar包后通过flink web上传到flink server。然后,找到你提交的job,输入如下的启动参数,提交submit即可:

成功运行的job的页面如下图,如果下图框框中的指标一直在转圈圈,那么很有可能是因为你运行了其他的job,导致available task slots不够用了。

默认的flink的slots配置是1,当出现任务插槽不够用时,上图圈圈转一会就会失败,然后打开job manager 点击log就可以看到job因为没有可用的任务插槽而失败了。

上面的问题可以通过修改conf/flink-conf.yaml中的taskmanager.numberoftaskslots来设置,具体指单个taskmanager可以运行的并行操作员或用户功能实例的数量。如果此值大于1,则单个taskmanager将获取函数或运算符的多个实例。这样,taskmanager可以使用多个cpu内核,但同时,可用内存在不同的操作员或功能实例之间划分。此值通常与taskmanager的计算机具有的物理cpu核心数成比例(例如,等于核心数,或核心数的一半)。当然,如果你修改了配置文件,flink server是需要重启的。重启成功后,可以在大盘看到,如下图箭头:

一切就绪后,在kafka-console-producer窗口中输入字符串回车,就会在flink job窗口中看到相关的信息了,效果前文一样,如图:

文末结语

本文算昨天hello wrod入门程序的升级版,实现了消费kafka中的消息来统计热词的功能。后面生产环境也打算使用kafka来传递从mysql binlog中心解析到的消息,算是一个生产实例的敲门砖吧。

正如前文所说的,落地的过程肯定会有很多问题,像上面的taskmanager.numberoftaskslots的设置。

后面会继续将我们落地过程中的问题记录下来,欢迎关注www.887551.com一起交流。

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐