利用BDOS快速发布Kafka Streams自定义应用
1 摘要
Kafka Streams 是Apache Kafka提供的用于构建应用程序和微服务的客户端库,其中的输入和输出数据存储在Kafka集群中。用户可以通过编写和部署标准Java和Scala的客户端程序,对Kafka集群中的数据进行实时处理,使编写实时应用程序和微服务变得更加简单容易。本文通过编写和发布一个Word Count的Kafka Streams示例应用,演示如何通过BDOS平台快速部署自定义的Kafka Streams应用。用户可以通过查看Kafka Streams官方文档更深入地学习使用Kafka Streams。
Kafka、Kafka Connect和Kafka Streams三者的关系可参考下图:
关键词: Kafka Streams,BDOS自定义应用
2 简介
本篇博客中将通过示范编写两个自定义程序Kakfa Producer的Python 程序(KafkaFileUploader)和Kafka Streams的Java程序(RedisDemo),向用户展示如何利用BDOS快速搭建一个端到端的Kafka Streams过程。前者是一个BDOS自定义Docker程序,通过一个简单的Web UI提供文本文件上传并生产文本文件内容到Kafka集群的功能;后者是一个BDOS自定义Tomcat程序,提供Kafka Streams消费Kafka数据并提供单词统计(Word Count)的功能,其中Kafka Streams流程实现的主要思路是:首先通过Redis来存储汇总数据,然后通过Kafka Streams程序来实时消费Kafka数据并输出到Redis中,最后从Redis里读取数据并呈现到前端页面,完成一个实时单词统计的展示。
本篇博客的主要步骤包括:
1. 创建Kafka Cluster和Topic
2. 从官方应用安装Redis应用
3. 编写一个Kafka Streams的Java程序并打包
4. 在BDOS上安装并运行Kafka Streams自定义应用(Tomcat)
5. 编写一个Kafka File Uploader的Python程序并打包
6. 在BDOS上安装并运行Kafka File Uploader自定义应用(Docker)
流程图如下:
3 步骤
3.1 创建Kafka Cluster和Topic
在本节中,用户需要创建一个Kafka Cluster和一个Kafka Topic “test”。在BDOS上创建Kafka Cluster和Kafka Topic可以参考下面的跳转链接(Kafka Cluster使用默认配置创建即可,Kafka Topic需创建一个名为”test”的Topic):
3.2 从官方应用安装Redis应用
在BDOS左侧菜单中依次点击“当前运行应用-官方应用”:
查看linktime-redis是否已安装,如果已安装,可以跳过此步,直接到3.3 编写一个Kafka Streams的Java程序并打包。如果没有安装,请按照下面的步骤操作。
在BDOS左侧菜单中依次点击“官方应用-应用市场”:
在应用市场中找到 linktime-redis 应用,点击“运行应用程序”:
进入linktime-redis应用的参数设置页面,用户可以直接使用默认参数设置安装(可根据集群实际资源情况,调整cpu,mem,disk的资源分配,instance请不要修改,默认是单机版)。点击“下一步”开始安装:
应用安装完成:
安装完成后,用户可以在BDOS左侧菜单中依次点击“官方应用 – 当前运行的应用”,查看linktime-redis应用的运行实例和详细参数:
3.3 编写一个Kafka Streams的Java程序并打包
在本节中,我们编写一个Kafka Streams的Java程序,打包成war包并用Tomcat 9部署一个Web服务器。
用户可以从这里下载我们已经打包好的war包直接安装(右键点击以下链接选择“链接存储为…”或“下载链接文件为…”,以下链接为相同下载内容,可选择其中一个点击):
具体的代码实现可以从智领云的公网代码仓库获取(以下链接为相同下载内容,可选择其中一个点击):
以上的Java项目需要打包成war包。Linux环境下可直接运行项目中的package.sh脚本进行打包(命令行需安装mvn,请参考maven),Windows环境下可使用命令行或者IDE工具打包。>),Windows环境下可使用命令行或者IDE工具打包。
3.4 在BDOS上安装并运行Kafka Streams自定义应用(Tomcat)
在BDOS上自定义Tomcat应用的安装和运行操作可以参考这里:发布Tomcat应用 。注意,在这篇博客里,我们用的是redisdemo.war包,而不是helloworld.war包。用户成功运行redisdemo这个tomcat应用后,可以从BDOS左侧菜单的“当前运行应用 – 自定义应用”中找到“用户组名-redisdemo”的应用;选择该应用可以显示应用详情,点击“运行中的应用实例”的“主机”列中的第一个端口链接并加上路径“/redisDemo”,(点击端口,会打开一个新页面,例如http://192.168.0.1:19179/, 在后面添加redisDemo,即http://192.168.0.1:19179/redisDemo) 即可访问其Web UI:
Web UI展示单词总量、词频和词云的效果如下:
3.5 编写一个Kafka File Uploader的Python程序并打包
在本节中,我们编写一个简单的Python Web服务器(采用Python Flask库实现),实现文件上传并生产到Kafka Brokers的功能。
用户可以从这里下载我们已经打包好的zip包直接安装(右键点击以下链接选择“链接存储为…”或“下载链接文件为…”,以下链接为相同下载内容,可选择其中一个点击):
具体的代码实现可以从智领云的公网代码仓库获取(以下链接为相同下载内容,可选择其中一个点击):
以上的Python项目(包括BDOS自定义安装所需文件)需要打包成tgz或者zip包。Linux环境下可直接运行项目中的zip.sh脚本进行打包(命令行需安装zip),Windows环境下可使用压缩软件如7-Zip进行打包。
3.6 在BDOS上安装并运行Kafka File Uploader自定义应用(Docker)
在BDOS上自定义Docker应用的安装和运行操作可以参考这里:发布Docker应用 。用户成功运行应用后,可以从BDOS左侧菜单的“当前运行应用 – 自定义应用”中找到“用户组名-kafka.file.uploader”的应用;选择该应用可以显示应用详情,点击“运行中的应用实例”的“主机”列中的端口链接并加上路径“/redisDemo”,(点击端口,会打开一个新页面,例如http://192.168.0.1:19179/, 在后面添加redisDemo,即http://192.168.0.1:19179/redisDemo) 即可访问其Web UI:
用户首先通过“Upload”标签上传一个文本文件,用户可以从这里下载一个sample.csv文件上传(以下链接为相同下载内容,可选择其中一个点击):
成功上传sample.csv之后,用户可以切换到“Produce”标签并将文件内容生产(Produce)到Kafka broker:
用户可以依次选择BDOS左侧菜单的“Kafka – Kafka Topic”,选择topic “test”进入该topic详情页,点击“latest 10 messages of topic”右侧的刷新按钮,验证以上文本文件内容已写入到该topic:
4 展示
用户可以同时打开以上两个自定义应用的Web UI,上传(Upload)更多的文本文件并生产(Produce)到Kafka,每当用户生产(Produce)一个文本文件的内容到Kafka时,就可以从Word Count程序的Web UI看到实时的单词统计变化,效果如下:
如对本教程有任何疑问,请截图发邮件至: admin@linktime.cloud
留言
评论
${{item['author_name']}} 回复 ${{idToContentMap[item.parent] !== undefined ? idToContentMap[item.parent]['author_name'] : ''}}说 · ${{item.date.slice(0, 10)}} 回复
暂时还没有一条评论.