StreamSet作为大数据ETL工具的选择,当然需要处理数据的合并与转存,其大部分功能集中于此。有些场景可能需要其对外提供个接口,可以被调用,StreamSets能做到吗?答案是能!并且能做当今流行的微服务,啊!好高大上~,今天就来看看吧。
目录
学习系列
- 数据对接-ETL之StreamSet学习之旅一
- 数据对接-ETL之StreamSet学习之旅二
- 数据对接-ETL之StreamSet学习之旅三
- 数据对接-ETL之StreamSet学习之旅四
- 数据对接-ETL之StreamSet学习之旅五
- 数据对接-ETL之StreamSet学习之旅六
- 数据对接-ETL之StreamSet学习之旅七 微服务
1、Restful风格的Api
使用StreamSets建立微服务时,可以建立三种类型的微服务,Rest Http服务,WebSocket 客户端、WebSocket服务端微服务。本次主要阐述建立Restful风格的Http形式的Api微服务,家里的Api服务,可以被其他系统调用。譬如有个手机App,要做一系列数据展示,那我们理论上可以使用这些api完成功能。
2、建立Api
在建立新管道时,我们选择微服务类型。如下图所示,在左上角选择新建管道。
在弹出选择框内选择微服务。
好了,一个框架已经搭好了,现在一个访问用户的restful接口已经建立。
3、测试一下
既然内容已经填好了,那我们先来测试下,看看链路是否顺畅。准备好你的api测试工具,什么拿手用什么。什么,你啥都没有,要我推荐?有工具的直接跳到4小节吧,我这里多啰嗦几句。
3.1 大名鼎鼎的Postman,后端程序员必备
网址如下:https://www.getpostman.com/
3.2 测试专业级Jmeter
专业级工具,可进行压力测试,入门稍微慢点,需要半天熟悉下。
3.3 curl 命令行,linux专属工具~~
想展示大神级的操作,来个命令,瞬间逼格满满。
curl -X POST "http://baidu.com:8080/api/test/test" -H "accept: application/json" -H "Content-Type: application/json-patch+json" -d "{\"data\":{\"orderGID\":\"string\"},\"accessToken\":\"string\"}"
注意,以上命令纯属测试!慎用。
4、测试微服务接口
按图中操作步骤,查看管道流程内的组件 HTTP Router 1,发现其定义了2个api接口路径
- GET /rest/v1/user
- POST /rest/v1/user
我们再查看下微服务监听的端口,在组件“REST Service 1”的配置上查看,如下图所示,默认是8000,这里我修改为7000。application ID是个重要的验证值,待会再说。
4.1 测试下get方法
发起一个get请求:http://192.168.100.48:7000/rest/v1/user,这里192.168.100.48是StreamSets安装的主机ip。7000端口是我们设定的端口,后面的 /rest/v1/user就是路由内配置的路径, get请求也是路由节点配置的。
此时发起请求后,返回403错误。
此处是StreamSets的第一个小关卡,点击组件“REST Service 1”的配置上,在Application ID下面点击“Show Value”,查看设置的值是什么,查看后发现是:“microservice”。
让我们在Http请求头里增加X-SDC-APPLICATION-ID 项,值设置为“microservice”。
OK,完美的发起请求,并受到返回信息了!
你可以把GET,修改为POST,请求测试第二个接口,应该也是OK的。
4.2 微服务的数据格式
默认建立的微服务接口,请求格式为Json格式,返回值亦为json格式。在组件“REST Service 1”的配置里,可以设定这些值。
Data Format设定请求数据时的数据格式,甚至压缩与否等。支持的数据格式有
- Avro
- Binary
- Datagram
- Delimited
- Json
- Xml
- Protobuf
- Text
- Log
- SDC Record。
返回值仅支持2种格式:Json和Xml。
协议方式支持TLS下的https方式。
接口返回的格式必须是
{“httpStatusCode”: xxx,
“data”: [
],
“error”: []
},这点是需要注意的。
5、微服务的结构
通过上述章节描述,您应该清楚了1个StreamSets支持的微服务api接口大致的骨架,对的,通过流程创建时,不可缺少的1个源组件是 “Rest Service”组件,后面紧跟着的是处理器组件“Http Route”,最后结尾的组件应该是“Send Response To”目标组件。中间的处理组件可以任意多的进行组合。这样子你的微服务就搭建起来了。
6、微服务的监控
StreamSets本身已经提供了丰富的监控信息,在每个管道的摘要内均可以查看整个管道的监控信息,点击组件,在摘要内也可以看到组件的监控信息。
通过上图监控,可以看到这个微服务提供的服务,有2组输入数据,处理完后数据成功输出的有4组,还有1组错误。点击左下面的Errors选项卡,可以查看错误统计信息;如果需要查看详细的错误,可以在流程图内找到有错误计数的组件,点击其选项内的错误,可以查看到详细的错误描述,甚至原始数据。
7、并发性能
有许多场景可能会要求微服务的并发性能,如果要求比较苛刻的话,可能需要您采用java/c#/Go等其他后端语言编写了,这是个复杂和精细的事情。对于StreamSets,也可以尽量满足性能要求,可以在组件“Rest Service”的端口设定下面设置“Max Concurrent Requests”,并发请求数量,数字越大越耗费cpu和内存,因此,适量设置到合适的数字,再进行压力测试,看是否满足您的需求。
8、结语
我做过相对复杂业务的流程微服务,下图只是一部分。
在同等熟悉的开发效率上,如果组件齐全,StreamSets开发微服务还是比较快的,如果缺少相应的组件,需要配合js脚本、第三方api等完成,相对优势逐渐不明显。
如果接口用在和三方交互,经常变动时,也是非常合适的,那真是说改就改,马上运行。
因此工具应该用在合适的范围,划定界限,不要什么场景都往一个工具上套!