Flink 消费 kafka 消息实战
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本次实战的内容是开发 Flink 应用,消费来自 kafka 的消息,进行实时计算;
环境情况
本次实战用到了三台机器,它们的 IP 地址和身份如下表所示:
注意:
本文的重点是 Flink,所以在 192.168.1.101 这台机器上通过 Docker 快速搭建了 kafka server 和消息生产者,只要向这台机器的消息生产者容器发起 http 请求,就能生产一条消息到 kafka;
192.168.1.104 这台机器安装了 Apache Bench,可以通过简单的命令,向 192.168.1.101 发起大量 http 请求,这样就能产生大量 kafka 消息;
整体架构如下图:
操作步骤
在机器 192.168.1.101 上部署三个容器(消息生产者、zookeeper、kafka);
在机器 192.168.1.104 上安装 Apache Bench;
在机器 192.168.1.102 上配置 kafak 相关的 host;
开发 Flink 应用,部署到机器 192.168.1.102;
在机器 192.168.1.104 上发起压力测试,请求地址是消息生产者的 http 接口地址,产生大量消息;
观察 Flink 应用的处理情况;
版本信息
操作系统:Centos7
docker:17.03.2-ce
docker-compose:1.23.2
kafka:0.11.0.3
zookeeper:3.4.9
JDK:1.8.0_191
spring boot:1.5.9.RELEASE
spring-kafka:1.3.8.RELEASE
Flink:1.7
在机器 192.168.1.101 上部署三个容器(消息生产者、zookeeper、kafka)
构建 kafka 相关的环境不是本文重点,因此这里利用 docker 快速实现,步骤如下:
在机器 192.168.1.101 上安装 docker 和 docker-compose;
创建 docker-compose.yml 文件,内容如下:
在 docker-compose.yml 所在目录执行命令**docker-compose up -d</font>,即可启动容器;
如果您想了解更多 docker 环境下 kafka 消息生产者的细节,请参考《如何使用Docker内的kafka服务》;
在机器 192.168.1.104 上安装 Apache Bench
不同的操作系统安装 Apache Bench 的命令也不一样:
ubuntu 上的安装命令**apt-get install apache2-utils</font>;
centos 上的安装命令**yum install httpd-tools</font>;
源码下载
接下来的实战是编写 Flink 应用的源码,您可以选择直接从 GitHub 下载这个工程的源码,地址和链接信息如下表所示:
这个 git 项目中有多个文件夹,本章源码在 flinkkafkademo 这个文件夹下,如下图红框所示:
开发 Flink 应用,部署到机器 192.168.1.102
Flink 环境搭建请参考《Flink1.7从安装到体验》;
应用基本代码是通过 mvn 命令创建的,在命令行输入以下命令:
根据提示,输入 groupId 为 com.bolingcavalry,artifactId 为 flinkkafkademo,其他的直接按下回车键即可使用默认值,这样就得到了一个 maven 工程:flinkkafkademo;
打开工程的 pom.xml 文件,增加以下两个依赖:
新增一个辅助类,用于将 kafka 消息中的内容转换成 java 对象:
SingleMessage 对象的定义:
实时处理的操作都集中在 StreamingJob 类,源码的关键位置已经加了注释,就不再赘述了:
在 pom.xml 所在文件夹执行以下命令打包:
打包成功后,会在 target 目录下生成文件**flinkkafkademo-1.0-SNAPSHOT.jar</font>,将此文件提交到 Flinkserver 上,如下图:
点击下图红框中的"Upload"按钮:
如下图,选中刚刚上传的文件,填写类名,再点击"Submit"按钮即可启动 Job:
如下图,在 Overview 页面可见正在运行的任务:
现在所有服务都准备完毕,可以生产消息验证了;
在机器 192.168.1.104 上发起压力测试,产生大量消息
登录部署了 Apache Bench 的机器,执行以下命令:
192.168.1.101 是消息生产者的 web 服务的地址,上述命令发起了并发数为 2 的压力测试,一共会发起一万次请求;
压力测试完毕后,在 Flink 的 Task Managers 页面的 Stdout 页可以见到实时计算的统计数据,如下图:
至此,Flink 消费 kafka 消息的实战就全部完成了,本次实战从消息产生到实时处理全部实现,希望在您构建基于 kafak 的实时计算环境时可以提供一些参考;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/51f8d0c2394dcae544b91425a】。文章转载请联系作者。
评论