利用BDOS快速发布Kafka Streams自定义应用

by tim 2018-01-25

1 摘要
2 简介
3 步骤
4 展示

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 demo: relationship

关键词: 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程序并打包。如果没有安装,请按照下面的步骤操作。
Kafka Streams demo: linktime redis detail

  在BDOS左侧菜单中依次点击“官方应用-应用市场”:

Kafka Streams demo: official app store

  在应用市场中找到 linktime-redis 应用,点击“运行应用程序”:

Kafka Streams demo: linktime redis setup

  进入linktime-redis应用的参数设置页面,用户可以直接使用默认参数设置安装(可根据集群实际资源情况,调整cpu,mem,disk的资源分配,instance请不要修改,默认是单机版)。点击“下一步”开始安装:

Kafka Streams demo: linktime redis install

  应用安装完成:

Kafka Streams demo: linktime redis install complete

  安装完成后,用户可以在BDOS左侧菜单中依次点击“官方应用 – 当前运行的应用”,查看linktime-redis应用的运行实例和详细参数:

Kafka Streams demo: linktime redis detail

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:

Kafka Streams demo: deploy redisDemo
 

  Web UI展示单词总量、词频和词云的效果如下:

Kafka Streams demo: redisDemo 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:

Kafka Streams demo: deploy KFU
 

  用户首先通过“Upload”标签上传一个文本文件,用户可以从这里下载一个sample.csv文件上传(以下链接为相同下载内容,可选择其中一个点击):

Kafka Streams demo: choose file
Kafka Streams demo: upload file success
 

  成功上传sample.csv之后,用户可以切换到“Produce”标签并将文件内容生产(Produce)到Kafka broker:
Kafka Streams demo: produce file content
 

  用户可以依次选择BDOS左侧菜单的“Kafka – Kafka Topic”,选择topic “test”进入该topic详情页,点击“latest 10 messages of topic”右侧的刷新按钮,验证以上文本文件内容已写入到该topic:
Kafka Streams demo: get latest 10 messages of topic
 

4 展示

  用户可以同时打开以上两个自定义应用的Web UI,上传(Upload)更多的文本文件并生产(Produce)到Kafka,每当用户生产(Produce)一个文本文件的内容到Kafka时,就可以从Word Count程序的Web UI看到实时的单词统计变化,效果如下:

Kafka Streams demo: play
 


如对本教程有任何疑问,请截图发邮件至: admin@linktime.cloud

留言

评论

${{item['author_name']}} 回复 ${{idToContentMap[item.parent] !== undefined ? idToContentMap[item.parent]['author_name'] : ''}} · ${{item.date.slice(0, 10)}} 回复

暂时还没有一条评论.