从腾讯文档Excel自动导入到离线人工导入 不要放弃沟通 美好与现实之间总能找到一个平衡点 一次工具实战感悟 多沟通给自己呼吸!

腾讯文档是一些同事喜欢使用的产品,进行文档分享与管理,同事间共享,权限控制!总之俘获了一批经常与文档打交道的同事!但是,文档好管理,最张还得与公司的OA打 交道。于是,产生了一个需求场景,需要将腾讯文档中的Excel文件内容,同步到公司OA系统。操作步骤:登陆腾讯文档,找到Excel文件,打开Excel文件,选择导出Excel文件,执行同步程序,将Excel同步到OA.

第一回合,美好滴初步设想,自动同步。

第一时间查看腾讯文档尾部,找不到类似OpenAPI的入口,在腾讯文档的社区发起提问,得到的答复是无此接口。最美好的想法落空。

第二回合,转战自动化测试工具为我所用

自动化测试工具,主要倾向于使用python+chromedriver跑脚本来完成。而遇到一个具有挑战性的登陆状态问题,使用微信扫码登陆的话,采用自动化测试工具有些困难。最终同事们想到的方案是,一个守护进程+一个执行进程。听想来也是挺美好的,只是自动化测试的小伙伴也没有真正去做过类似的方案,一般都是从头到尾一个Case,没有一个守护+一个执行的。于是,方案悬置,未实施。

storm与财富增值

storm与财富增值

享受宜信星火金服宜心理财实现财富增值,预期年化收益10%
扫码二维码
通过宜信星火金服活动链接 http://www.ixinghuo.com/qcode.php?yixinqcode
通过宜信星火金服理财师店铺链接:https://xinghuo.yixin.com/yiidea
通过宜信星火金服理财师移动端邀请页面https://xinghuo.yixin.com/mobile/activityPage/shareShop/yiidea
5.通过宜信星火金服理财师店铺宜心理财团队短链接:
http://yixin.hk
http://yixin.ceo
http://yue.ma
通过宜信星火金服宜心理财团队网站页面
http://www.yixinlicai.com.cn
通过 宜信.公司 | 宜信.网络 | 宜信.net

第三回合,JS主战场

第二回合采用chromedriver,相比较于JS,两个方案面可抽象的理解为同一个方案。将Chrome开着,相当于守护操作,执行JS相当于执行操作。初步尝试此方案的时候,还是很开心的。JS模拟点击,直接点击导出本地excel,能实现Excel文件导向,达到预期理想。但是JS模拟需要分现两步,第一步,点开菜单,第二步,点击导出。当导出【本地excel表格(.xlsx)】存在于dom树中,这个操作是成功的。但是实际模拟场景是,先去模拟点【文件】,js普通的模拟竟然点不出菜单!!!!那意味着,得使用高级一点的模拟方式,先把鼠标模拟到指定位置,再模拟人工点击。感觉是这样子的。

第四回合,模拟精灵

JS直接模拟点击不管用,那么使用模拟精灵直接模拟点击自然是可以吧。录制模拟脚本,搜索、打开、点菜单,点导出,回放。感觉要见证奇迹了,no,no,no,那有什么奇迹,菜单还是点不出来。【感觉】模拟精灵并没有完全模拟录制的动作,存在加速执行的节奏,省略了轨迹模拟,导致鼠标停留在【文件】上方的时间不足,没有把关键动作执行好。单独录制点击菜单动作,菜单出来了。也就是,关键脚本单独录制,再合成。想想也是醉了。模拟精灵的一个问题在于,如果系统中有任何突出窗口挡住了界面,操作就断了。这种担心,可能也没有必要,关掉系统自动更新,一般莫名的弹窗也是不会有的。

第五回合,沟通神器

经过沟通,Excel导入的工作频度较低,对于自动导入来讲,实现起来麻烦!最终换成了人肉导出excel,再导入到OA。另外,要自动,不仅仅是技术上的一个实现,也是工作流程上的一个变化,将同事已经熟悉的工作方式与流程,改变掉,除非是熟悉并能改进,否则,还是用辅助工具的形式。

第六回合,Coding战场

Excel解析

使用开源的POI读取Excel真的是非常开心,想想不用安装office,不用担心进程挂起,就是各种开心。当然POI也有些让人不开心的地方,读取单元格数据的时候,会有些不太方便,int,string,datetime得严格区分开,时间读出来还有可能是数字的,所以需要做些特殊的处理。这次解析Excel有一个小小的麻烦之处,一张worksheep中一般是1个父节点多个子节点交错着出现,需要逐行扫描记录,识别出父节点与子节点,并将父节点与子节点组装起来。想不到非常顺利的解析完了~

​演练

导完数据后,看起来没问题了。但是老感觉没谱。不知道数据最终会怎么使用,前前后后能否良好的串起来?这个时候,做演练是最好的选择了。还真有新的收获,之前的代码与线上代码不一致,数据库少了三个字段,上线就能崩溃。另外,导入数据还少操作了2张表。

结束语

需求是美好的,多沟通沟通,也许我们能变得更加现实。【自动】牵扯的不仅仅是技术实现,更是工作流程与工具的变更。

发表在 未分类 | 留下评论

一招搞定可视化工作流设计器开发 巧用draw2d绝战可视化工作流设计器 友好的开源协议MIT

技术岛公众号

技术岛公众号

工作流通常会使用xml进行管理与配置,之间流转关系使用不同的xml节点进行配置,看着xml文件,很难直接Get到流程之间的流转关系。如果使用可视化的呈现来展现工作流,则很好的解决这个问题。更好的管理与维护。

可视化呈现,自然离不开图形的操作。Github上找以2个非常有价值的工程 ,分别是:

https://github.com/jifuwei/workflow-designer-web

https://github.com/freegroup/draw2d

都fork到仓库里了,不用担心找不到主

https://github.com/Lancker/draw2d

https://github.com/Lancker/workflow-designer-web

实现的思路:

首先,查看workflow-designer-web,这个工具有一个简单的工作流设计器,可以体验,能画节点,并用线条连接上。存在的问题是:节点类型不足以覆盖我所想要达到的效果。如果拿visio来比的话,操作流程度也是一个问题。阅读workflow-designer-web,图形操作相关的组件主要是draw2d。

storm与财富增值

storm与财富增值

紧接着,转战draw2d,这个是开源的,能做什么不能做什么可以通过官网及demo查看,主要是以下2个网址:

官网 http://www.draw2d.org/

Demo示例:https://freegroup.github.io/draw2d/index.html

非常开心的可以看到,draw2d采用MIT协议,官方网站上提到了Draw2D的用途之一就是workflow设计器的开发,有图有真像,来看看官网是怎么说的:

Draw2D touch is a modern HTML 5 JavaScript library for visualization and interaction with diagrams and graphs. Draw2D touch makes it easy to create visual languages & tools of various kinds.

在示例代码中可以看到不少workflow的影子,github仓库的介绍里也有一个BrainBox的实际应用,开发者使用Draw2D做的电路可视化工具​箱。

Draw2D-examples

有了Draw2D,如何开发一个工作流可视化编辑器​呢?开源大神还是很贴心的给了一个Shape Designer。如果没有这个东东,做可视化设计器会有些让人“恶心”,因为画一个图,可是一堆线条组成的啊~想想都够,还好,有这个Shape Designer!

shapeDesigner

Shape Designer能帮我们设计好各种基础的Workflow组件,用来设计不同的任务节点!再回到https://github.com/Lancker/workflow-designer-web,这个是工作流半成品,少了组件,正好使用Shape Designer设计满足自身需求的组件!

简单小结一下​设计器开发流程:

  1. 使用Shape Designer设计工作流节点
  2. 参考workflow-designer-web,更换节点组件

​就这么结束了?​没有没有。流程文件的导出与加载还是空白,给大家留一个悬念​,下次再分解!

巧妙拆分bolt提升Storm集群吞吐量

技术岛公众号

技术岛公众号

发表在 未分类 | 留下评论

游戏主线副本故事引擎长什么样子?工作流&游戏主线副本故事&Storm Topology相互推导,看游戏圈与传统企业的千丝万缕情怀

技术岛公众号

技术岛公众号

进入到经典大型互联网免费回制游戏《问道》,会看到很多游戏的主线故事,副本故事,故事大概是这样子:先去干什么,再去干什么,再去干什么。主线玩着玩着,还可以做副本故事。结合工作流、Storm Topology的经典,发起这些长得非常像,之间可以相互推导出来。

简化出来,游戏的故事情节可以这么表示:

storm与财富增值

storm与财富增值

​今天的工作流&游戏主线副本故事&Storm Topology相互推导,看游戏圈与传统企业的千丝万缕情怀,先来看看工作流简化表示吧。

一个工作流的表示,就是今天的封面啦。从开始结节出发,经过一些节点处理,到达结束。

有没有感觉非常像游戏里面的故事主线,先干什么,再干什么?是的,至少我觉得是很像了。不现的主线,可以当成是不同的工作流,玩家进入不同的故事,相当于进入不同的工作流。相比之下,游戏的故事节点会比较长,节点处理更加单一,基本上是下一个节点,下一个节点,工作流中的节点处理则更加丰富。如果比较节点处理的可视化呈现,那自然是游戏更加直观了。

Storm Topolgy的处理,我经常喜欢画成横向的,基本上是长成这样子:

为了把三者归到一个体系中来,我画了一个竖版的,长得是这样子的:

再比较工作流、游戏主线副本故事、Storm Topology,三者确实有着异曲同工的像。Storm Topology目前看到的实现形式是通过代码设置,如果做成配置模板,那这三者就统一成一类流程引擎中来了。

在传统企业中玩工作流,在大数据领域玩Storm Topology,都可以尝试实现一个游戏故事引擎。没有坐过飞机,还没有见过飞机飞。对于回合制游戏,有了故事引擎,感觉就有了一个核心啦!感觉兴趣的小伙伴,赶紧行动起来吧!

巧妙拆分bolt提升Storm集群吞吐量

技术岛公众号

技术岛公众号

发表在 未分类 | 留下评论

签名验证到底使用SortedMap、LinkedHashMap、HashMap中的哪一个

技术岛公众号

技术岛公众号

最近同事发现有接口签名验证通不过,查了许久,发现,两边的验签规则不一样。最大的差异在于时间戳是否参与参数的排序。使用较多的版本是时间戳参与参数排序,而突然出一个接口中的时间戳不参与排序,导致算出来的签名值不一样。让我们使用一段main方法来感受一下其中的差异。

storm与财富增值

代码堆得好不如财富增值好

public static void main(String[] args) {

System.out.println(“SortedMap”);

SortedMap<String, String> sortedDict = new TreeMap<>(Collator.getInstance());

sortedDict.put(“B”, “B”);

sortedDict.put(“A”, “A”);

sortedDict.put(“C”, “C”);

System.out.println(sortedDict);

System.out.println(“LinkedHashMap”);

Map<String, String> dic = new LinkedHashMap<>();

dic.put(“B”, “B”);

dic.put(“A”, “A”);

dic.put(“C”, “C”);

System.out.println(dic);

 

System.out.println(“HashMap”);

Map<String, String> hashMapDic = new HashMap<>();

hashMapDic.put(“B”, “B”);

hashMapDic.put(“A”, “A”);

hashMapDic.put(“C”, “C”);

System.out.println(hashMapDic);

}

输出的结果:

SortedMap

{A=A, B=B, C=C}

LinkedHashMap

{B=B, A=A, C=C}

HashMap

{A=A, B=B, C=C}

很显示,当我们使用SortedMap、HashMap来处理签名参数的时候,参数自动排序了,而当我们使用LinkedHashMap处理的时候参数则不会排序。

造成问题产生的原因,看起来是使用了LinkedHashMap导致的,仔细分析,完全是两种签名处理思路导致的。

推荐思路一:使用SortedMap、HashMap做预处理,与顺序无关

不推荐思路二,没有对url中的query参数做任何预处理,直接在尾部附加上了时间戳,省了一步参数预处理。

思路二的问题在于,参数的顺序会影响最终签名,调用方需要知晓参数顺序。如果大家都知道并严格执行签名顺序,思路二其实也是正常的可行的。但是一般来讲,团队成员可能不断变化,一不留神就掉进这个洞里了。推荐使用思路一进行签名验证。

思路一与思路二的验证方式如何对接上呢?

在思路一追加时间戳之前,需要创建一个LinkedHashMap,将处理过的参数put进去,再将时间戳put进去,之后生成的签名URL就与思路二是一致的。

小结:当我们设计接口签名规则时,可以遵循一下一个重要的规则,参数顺序无关。

签名参考流程:

1.参数提取,记得使用SortedMap或HashMap

2.过滤处理

3.生成待签名URL

4.签名

5.生成签名后的URL

巧妙拆分bolt提升Storm集群吞吐量

技术岛公众号

技术岛公众号

发表在 未分类 | 留下评论

搞技术的公司用上这几个工具 研发运维开心指数暴涨

这篇文章适合在小公司成长的小伙伴,如果你恰好看到了,赶紧给自己的公司部署上这几个小工具,你会发现,省下了很多宝贵时间。将研发从代码开始就管理起来,嗯,就是这么神奇哦。

在小公司有这么个特点,一个人要干的活超级多,有些活非常繁琐,而且经常要干,占用了很多琐碎的时间,投入产出比低就不说了,主要是天天重复做,心如刀割,比如说代码管理,上线发布,代码质量检查等等。回想一下自己用的什么工具在管理代码、用的什么工具自动部署?今天要推荐的这个工具组合,能让代码管理、发布、部署做到质量管理、自动化。没有重复造轮子,有兴趣自己造轮子的,可以尝试一下。

No.1 Jenkins

在Jenkins中建立构建任务,把代码从GitLab上拉取下来,构建,Jenkins与sonarcube集成,进行代码质量检查,完成测试环境发布,将构件发布到自动部署的约定位置。

No.2 sonarqube

sonarqube is 我见过的最强大的代码质量检查工具了,能分析起各种坏味道,bug,不合理的代码编写,内置了很多检查规则,使用sonarqube可以让团队的代码编写统一规范,而且可以防止一些低级的写法出现。当然,配置sonarqube的检查规则的时候,最好也依据团队的编写做些小小的适应调整,比如写习惯了UserBLL会报上坏味道,要求写成UserBll,有结小小的不爽,是吧。统一规范就是舍去的过程,建立好了检查规范,大家都用sonarqube执行严格的代码检查,就好了。

No.3 gitlab

之前使用tfs,svn,后来被带入gitlab,使用gitlab,觉得使用git也不错哦。给自己的公司部署一个Gitlab,严格管理主干分支,新人在分支上玩,发起merge请求,合并主干,一下子管理就规范多了。

No.4 自动部署系统

可以自己DIY一个,也可以找个开源的,前几天有看到一个国内的小伙伴开源了一个自动部署系统,在这里就不推荐了。使用Jenkins构建完的war包,jar包,dll,可以使用自动部署系统管理起来,发布的时候,点一下,回滚的时候再点一下。

后记,自动部署系统可以对接上云主机、物理机、docker,嗯嗯~这么一套强大的系统,结合了Jenkins\sonarqube\gitlab,就是让小伙伴的时间能省下来。一定不要觉得前配置麻烦,这些工具配置好之后,后面就可以开心的玩耍了!

这么一套工具怎么配置,怎么才能搭建一套呢?回复公众号【研发工具】索取!

巧妙拆分bolt提升Storm集群吞吐量

技术岛公众号

技术岛公众号

发表在 未分类 | 留下评论

魔高一丈 道高一尽 帐号泄漏攻守之战 多传的Account 为友商提供了天然信息 早发现早处理 保护用户隐私 构建强有力安全环境

今天遇到了两个非常典型的互联网运营平台安全风险问题,很具有代表性,虽然没有直接带来损失,或多或少也会给用户带来不好的安全体验。通过针对性的紧急修复,算是在这场攻守之战中,速战速决,可谓魔高一丈,道高一尽!

Case 1:接口中暴露了用户帐号信息,恶意用户扫描爬取帐号

有的时候,程序员写的接口会返回丰富的数据,有用的,没有用的,都带上。今天这个Case就是这种很常见的现象,带上了帐号信息,而实际上又没有使用到。导致有网友通过接口爬取信息,还将工具晒到了网上。

处理解决:

  1. 通过抓包分析工具wireshark分析被爬取的接口,大概有3个不同的URL,查代码对应到内部一个处理逻辑。
  2. 将返回结果过滤掉帐号信息再返回

事后点评:一段代码一段逻辑都有自己的生命周期,在早期的时候,更注重有没有,能不能满足基本的业务需求。随着业务的发展,考虑的问题越来越细致,有的不是问题的问题也就都出来了。也不能因此就提心吊胆的写代码,大概更新一下准则,有个可执行的标准即可。能防范于未然,那是更好不过。

Case 2:短信验证位数问题

有的时候想体验更亲民,短信验证码设置成4位数字,验证不卡次数,有效期一分钟。在这种验证逻辑下,暴力破解很容易就穷举完验证码,安全风险算是比较大。大多数平台选择6位数字验证码,也有别的平台字母加数字,选用7位的,8位的平台也有,不多!平安银行就是不走寻常路。短信验证码是一个很常见的功能,感觉设置成6位,卡一下验证次数会比较好。

今天最大的收获在于使用wireshark分析了http请求,又收获一个强大的工具。虽然用得不专业,但是对于这种简单的抓包分析,在工具上起到了非常重要的作用!

发表在 未分类 | 留下评论

技术岛Jishudao公众号开通啦!修炼技术就在技术岛!

技术岛公众号

技术岛公众号

技术岛Jishudao.com 修炼技术就上技术岛!无论是大神还是虾米,这里有踩坑干货,也有经验分享!技术岛的初忠在于以技术为沟通交流的桥梁,建立一个技术交流与分享的小平台!希望每位来到技术岛的小伙伴都能积极投递文章!技术岛服务公众号每个月推送4次,每次最多选10篇文章,对于选择标准,我们希望以经验分享为主,能结合一些实际的案例,分享一些经验性的东西。纯技术文档式的文章可能入选的小可能性小。当然,目前也是技术岛开设的初期,也没有一个固定的标准可以参考,希望投递过来的文章带有个人的态度与思考。

技术岛公众号是www.jishudao.com的官方公众号,也是通过一个新的媒体渠道传递技术正能量,每天工作或多或少都会有些收获,将自己所学,整理的过程也是一个自我成长的过程,希望更多的人能参与到技术岛的技术修炼环节中来。

技术岛福利待遇

对于在技术岛开通博客并积极投递文章的小伙伴,会有很多福利待遇哦!岛主将联合异业合作的小伙伴送出一波一波的福利!暴走小红包、免费零食、RMB打赏,只要文章写得好,技术岛将为您呈现满满的小福利!

技术岛公众号

技术岛公众号

发表在 未分类 | 留下评论

Storm Topology : Elasticsearch & Redis 构建实时性低延时数据统计分析 呈现大数据分析效果

写在前面

Storm实时分析系列文章已经有多篇了,每篇的重点不一样,今天的Storm文字直播分享的是Storm实时分析过程中的延时处理。在整理Storm 探针的过程中,发现Storm涉及的知识点还是很多的!最近所做的Storm工作都是基于Low Level API开发,而官方显示还有Tident高层次接口,数据落地方案也有不同的实现方案。在这里分享的是实战的心得,不一定是最佳的处理方案也不是实际落地方案,而是包含个人色彩的理解模型方案与实战方案的融合,仅供参考。

一天一收获

作为一个有态度的Storm经验分享者,先给大家介绍一下阅读完全文可以收获的知识点:

  1. ES落地优化经验
  2. 落地频率的取舍之道
  3. 实时数据呈现的Topology设计

业务背景

本大数据Storm业务背景是基于链路跟踪的日志分析处理,呈现出链接实时响应状态(正确率,调用关系,平均响应时长等等),链路跟踪的日志标记了同一请求的日志,同一请求日志有一样的跟踪标识,并且日志记录分收发时间。每个业务的请求调成关系图要实时计算出来。

日志特征

1.收发日志为2条日志,意味着时长计算需要将日志合二为一

2.链路跟踪为多条日志,意味着要从多条日志中生成调用关系

3.ES最初设计统计结果存储跨度为分钟,即每个接口的统计状态都是按分钟存储统计数据,每分钟的调用次数、总消耗时长

第一版 Topology

第一版Topology的处理满足了基本数据呈现指标,调用关系图生成、正确率、平均时长都能计算出来。美中不足之处在于,数据是合并到分钟存储,为了确保日志处理到分钟,设置了一定的时间窗口,等日志统计完再写到ES。时间窗口的设计导致查看到的数据存在延时。

实时性优化

优化方案有两种,一是调整ES落地频率,提升实时性,同时改造查询接口,将每分钟的结果合并处理!二是借助Redis等内存解决方案,将查询结构分成内存区以及ES区。方案一相对更好实施,只需调整落地频率,并改查询接口做调整,方案二则需要引入新的内存解决方案。虽然没有选用方案二,但是个人还是更倾向于方案二。

ES采用批量插入模式,效率会更高,否则日志处理速度会很慢。实战经验显示,逐条插入几个小时,批量插入可能几分钟。

升级版 Topology 【Dream Version】

方案二利用了redis存储统计结果,落地ES的数据还是按分钟存储,不会像方案一,一分钟数据可能产生多条统计数据。从存储上、实时性上,方案二都更加完美。方案一的频率会影响ES存储量,所以采用方案一的话,落地频率是把双刃剑,得有所取舍。方案二则会更加灵活,不会增加ES存储负担。

The End

目前来讲,还没有在正式环境运行,我们也算是在吃Storm螃蟹,是否应用得当,也要更进一步的看运行效果。实时性的要求,也要看业务运用的情况。优化也是一个需要探索的事情,今天就先到这里。

预告

近期会推出

Docker+Linux+FileBeat+Kafka+LogStash+Elastic+Storm+MySql

系列部署实战文章,关注公众号,每天进步一点点。

巧妙拆分bolt提升Storm集群吞吐量

发表在 未分类 | 留下评论

Storm 1.2.2 Run Under Windows 7 : 试错填坑之路!大数据玩得是耐心与不放弃!开启干货模式纯享版

Storm实时大数据windows实验

Storm实时大数据windows实验

年前准备的大数据日志平台系统文章,缺少Storm环节,之前开发是在eclipse中直接跑的Storm,计划赶不上变化!Storm 1.2.2在Windows下跑得比较闹心。Storm 1.2.2 在windows 7下试玩,就是一个虐心之路,需要耐心需要一点一点排除问题。完整的看完本文,可以有如下收获:

  1. 能征服windows 7+Storm 1.2.2的配置
  2. 能跑起Storm Topology并查看拓扑的实时运行图,截取Storm Topology Visualization 图片,如本文封面。
  3. 收获跑storm1.2.2典型问题的三个文章链接,亲测好用,疗效显著

Docker+Linux部署大数据环境预告

年前的部署都是在windows下进行,后续将进行Docker+linux下的大数据环境配置实验,感兴趣的小伙伴可以关注本公众号。

写在前面

玩开源有一个需要重点注意的地方,不同的版本兼容性不一样,本次大数据实验是在windows 7 +storm 1.2.2 + zookeeper-3.4.12 的搭配下进行,其他环境下仅供参考。zookeeper-3.4.12部署与搭建请参考:

大型互联网平台日志系统(FileBeat+Kafka+LogStash+Elastic+Storm+MySql)小白的入门实战篇

总结如下:

一、cmd命令无法使用,跳过cmd命令,直接使用python命令

不要使用storm自带的storm.cmd,重要的事情再说一遍,直接使用storm.py去跑命令

storm.cmd提示被抛弃了,要使用storm.ps1,执行powsershel,提示问题:

$PSCommandPath为空,

Python Version 解析失败

修复方案一:$PSCommandPath为空,可升级为PowserShell 3.0 或者硬配置为当前路径

修复方案二:Python Version 使用PowerShell简单调试一下,可以修正为:

$PythonVersion = (& python -V 2>&1).ToString().Split(” “)[1];

cmd\powershell都被我跳过了,cmd,powershell一顿如狼似虎的操作,最后也是调用python,再去调java,所以直接忽略cmd/powsershell,使用如下命令:

命令执行位置:

D:\BigData\apache-storm-1.2.2\apache-storm-1.2.2\bin

常用的几个命令:

python storm.py nimbus

python storm.py supervisor

python storm.py ui

默认UI端口是8080

python storm.py jar [xxxx].jar [带命名空间的topology] [topology别名-可任性取名]

取个例子:

D:\BigData\apache-storm-1.2.2\apache-storm-1.2.2\bin>python storm.py jar storm-starter-1.2.2.jar storm.starter.StatefulTopology StatefulTopology

二、apache-storm-1.2.2.tar.gz自带Demo,编译不容易

apache-storm-1.2.2.tar.gz中自带了丰富的示例代码,因为太丰富了,所以问题也来了。

2.1 太多Demo,反而不利于starter

提示找不到kafka-avro-serializer-1.0.0.jar,maven中心库没有这个,需要另外配置存储库,而我只是一个starter,想快速的跑起storm,并不想kafka!

解决方案,配置maven存储库:

通常所在位置:

C:\Users\Administrator\.m2\settings.xml

修改mirrors节点

 <mirrorOf>*,!confluent</mirrorOf>

增加一个新的repository

<repository>

<id>confluent</id>

<url>http://packages.confluent.io/maven/</url>

</repository>

2.2 多种开发语言支持,drpc,Too Much Under A JAR For Starter.jar

编译完之后,这个新人启航的jar包有100多mb,其实我只想是跑个超级简单的demo来看一下效果。连踩2个坑,一个是多语言能力展示,用java包裹python代码,跑不起来,一个是用java包裹node.js,也没有跑成功。本想,一个一个问题kill掉,但是网上的套路都不管用。暂时先不管Storm的多语言支持。另一个是drpc服务,二次选择topology,踩到 drpc了,配置完drpc,还是不管用,再次跳过,目前也没有这个使用场景。最后,仔细的找了一个简单的,纯java血统的topology: StatefulTopology

三、其他问题

向 storm 提交 jar 包后,访问 http://localhost:8080/index.html 有时候能看到topology,但是没有节点跑。等了一会儿也没有。解决方案:将storm 中的topology kill掉, nimbus,supervisor,ui全部停了,重新提交一遍。大概在第三遍的时候出来了,懵逼的状态【可能哪一步做错了】~~截到图:

Storm实时大数据windows实验

Storm实时大数据windows实验

2.3 又见PowerShell

storm.ps1的错误提示,真心不够友好!为了检测python版本是否符合要求,写了好几行ps代码,结合ps代码本身也有版本要求。

$PSCommandPath 为空,代码直接报错

这段ps1 ,应该有提示ps版本问题。

或者,应该是有一个前置安装检查的脚本或工具,引导玩家或自动处理前置安装问题,这样子才会更加好友。这个方面微微软的sqlserver安装向导就做得比较好~

PowerShell 未经数字签名 系统将不执行该脚本

set-executionpolicy Bypass

写在后面

python storm nimbus这种命令方式是同事告诉我的,不然还在坑里爬。本来windows 7 + Storm就是非常规的组合,只是想把windows系列的文章写全了,跑通,所以才挣扎了这么久。感觉从事开源,就像一个自己的舞台,大家很努力的做一个storm,别人用得是那么的闹心,虽然官方提供了那么多文档那么多示例。storm.cmd , storm.ps1的提示真心留下了阴影。期待下一波Docker+linux玩转大数据吧,同样是zookeeper,filebeat,kafka,storm,elasticsearch等,一步一步亲测,全部跑通!

巧妙拆分bolt提升Storm集群吞吐量

参考链接:

找不到kafka-avro-serializer-1.0.0.jar

https://stackoverflow.com/questions/43488853/confluent-maven-repository-not-working

PowerShell版本问题

https://stackoverflow.com/questions/24663243/why-doesnt-write-host-pscommandpath-output-my-current-path

发表在 未分类 | 留下评论

大型互联网平台日志系统(FileBeat+Kafka+LogStash+Elastic+Storm+MySql)小白的入门实战篇

大型互联网平台日志系统(FileBeat+Kafka+LogStash+Elastic+Storm+MySql)小白从入门实战篇

大型互联网平台日志系统(FileBeat+Kafka+LogStash+Elastic+Storm+MySql)小白从入门实战篇

原计划昨天的公众号图文直播因公司年会抽奖而没有进行,今天在自己的电脑上实战了FileBeat+Kafka+LogStash+Elastic+Storm+MySql的环境搭建,由于今天的实验过程并不顺利,所以整体实验方案砍掉了Storm、MySql,这将是明天的套餐。

作为一个有态度的资深公众号运营人员,写一篇文章不仅会为了达到原创标准凑够300字,同时也会把本次实战的心得与经验放到前面,让小伙伴能以最快的速度收获一些经验性的东西。同时,实战是一步一步操作,并跑并跑起来,是在坑里爬了很久,才写出来的,如果你有兴趣可以照着做一篇,是可以跑起来。看不明白的,可以留言问,包教包会~

完整的读完本实验总结,可以有以下收获:

  1. 能搭建互联网平台日志收集系统
  2. 能知道如何处理开源产品配置报错

本次实战的小心得如下:

  1. 玩开源产品,版本多,不要怕提示出错,网上多找找,一般都能找到答案。
  2. 这不是在堆代码,只是使用开源的产品,不需要编程功力。
  3. 先了解一下相关产品的设计思路,用得思路会更好些

本次实验用到的开源产品:

elasticsearch-6.5.4

elasticsearch-head

filebeat-6.5.4-windows-x86_64

kafka_2.12-2.1.0

logstash-6.6.0

zookeeper-3.4.12

autovisit.bat ( 这个一小段脚本,用来不断访问页面,以产生访问日志,自己DIY也可以,很简单。加头我放到Github上吸粉

本次实现新增加了Kafka\LogStash\zookeeper,先来看一下实现录的小视频,直观的感受一波操作。

关注公众号 Yuema约吗 可以查看录制的视频

一、zookeeper

kafka用zookeeper来协调集群节点,apache下很多开源产品都是用zookeeper来协调集群节点。知道这么回事就好。本次实战就不讲原理了,感兴趣的小伙伴可以去查资料。跑命令 zkServer.cmd 启动!配置文件:zookeeper-3.4.12\zookeeper-3.4.12-1\conf\zoo.cfg [把zoo_sample.cfg修改成zoo.cfg],用单机模拟的集群,所以后面有带了三个节点配置。纯体验的话,可以去掉,直接跑单机,看到的效果是一样的。

zookeeper_config

zookeeper_config

#存储内存中数据库快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。

dataDir=../zookeeperData

#日志文件的位置

dataLogDir=../zookeeperLog

#mock a cluster

server.1=127.0.0.1:12888:1388

server.2=127.0.0.1:12889:1389

server.3=127.0.0.1:12887:1387

zookeeper_three_node

zookeeper_three_node

偏好配置还需要zookeeper-3.4.12\zookeeper-3.4.12-1\zookeeperData中加一个无扩展名的myid,三个节点可分别取值为1,2,3

zookeeper_three_node_file

zookeeper_three_node_file

zookeeper_three_node_file_myid

zookeeper_three_node_file_myid

二、Kafka

三个节点,把文件压解出来,先配置好一个,再复制几个,再微调一下。结构如下。因为是单机模拟集群,所以就这么干啦。

打开配置kafka_2.12-2.1.0\kafka_2.12-2.1.0-2\config\server.properties

重点配置敲黑板,注意,单机三个节点的话,端口改成9092,9093,9094,日志文件如果像我一样傻傻的用绝对路径的话,一定要每个点节都加上自己的编号区分开,不然会一直报错!

关键配置

listeners=PLAINTEXT://:9093

log.dirs=/tmp/kafka-logs-2

启动kafka

kafka-server-start.bat ../../config/server.properties

注意:这里用的是相对路径,跑LogStash的时候也要这么干,网上找到一个教程没有这么干,一直报错

相关命令送上来:

创建主题

kafka-topics.bat –create –zookeeper 127.0.0.1:2181 –replication-factor 1 –partitions 1 –topic dqtest

罗列kafka主题

kafka-topics.bat –list –zookeeper 127.0.0.1:2181

消费topic

kafka-console-consumer.bat –bootstrap-server localhost:9092 –topic dqtest –from-beginning

敲黑板:不同的版本命令有所差异,如果跑不起来,可以核对一下版本对不对。同时,除了搜索,还可以打开config中的文件配置,查看睦一下到底是用的bootstrap-server还是zookeeper,嗯~就是这样子,算是很容易掉坑里的环节。

生产topic消息

kafka-console-producer.bat –broker-list localhost:9092 –topic dqtest

三 LogStash

3.1 填坑之路:报错找不到主类

解决:logstash-6.6.0\logstash-6.6.0\bin\logstash.bat

将55行的  %CLASSPATH% 修改 “%CLASSPATH%”

3. 启动命令

logstash -f ../config/first-pipeline.conf –config.reload.automatic

因为找到的资料用的是first-pipeline,所以也跟着敲了,唯一要注意的是,这里记得加上../config/,不然找不到配置文件的。

见证奇迹的时刻来了,折腾大半天,最后将FileBeat->Kafka->LogStash->Elasticsearch配通了,结果会是什么样子的呢?

哈哈,就是这样子的啦~今天的实战说真的不太顺利,遇到的小坑都有点意外,其中还需到报路径太长,之前是D:\DQ\xxxx\0008.Job\100010.日志系统\filebeat-6.5.4-windows-x86_64,报错后,修改成了D:\BigData\filebeat-6.5.4-windows-x86_64

明天的大餐是将Storm+MySql配置进来,Storm从Kafka消费数据,将运算结算存到mysql,关注公众号就能收看明天的大型实时日志系统实验总结!期待明天相聚在约吗图文直播间。

巧妙拆分bolt提升Storm集群吞吐量

发表在 未分类 | 留下评论