【Twitter Storm系列】flume-ng+Kafka+Storm+HDFS 实时系统搭建

技术交流群:59701880 深圳广州hadoop好友会


微信公众号:后续博客的文档都会转到微信公众号中。

一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的Flume+Kafka+Storm的实时日志流系统的搭建文档,自己也跟着整了一遍,之前罗宝的文章中有一些要注意点没提到的,以后一些写错的点,在这边我会做修正;内容应该说绝大部分引用罗宝的文章的,这里要谢谢罗宝兄弟,还有写这篇文章@晨色星空J2EE也给了我很大帮助,这里也谢谢@晨色星空J2EE


之前在弄这个的时候,跟群里的一些人讨论过,有的人说,直接用storm不就可以做实时处理了,用不着那么麻烦;其实不然,做软件开发的都知道模块化思想,这样设计的原因有两方面:

一方面是可以模块化,功能划分更加清晰,从“数据采集--数据接入--流失计算--数据输出/存储”

1.数据采集

负责从各节点上实时采集数据,选用clouderaflume来实现

2.数据接入

由于采集数据的速度和数据处理的速度不一定同步,因此添加一个消息中间件来作为缓冲,选用apachekafka

3.流式计算

对采集到的数据进行实时分析,选用apachestorm

4.数据输出

对分析后的结果持久化,暂定用mysql

另一方面是模块化之后,加入当Storm挂掉了之后,数据采集和数据接入还是继续在跑着,数据不会丢失,storm起来之后可以继续进行流式计算;


那么接下来我们来看下整体的架构图


详细介绍各个组件及安装配置:

操作系统:ubuntu

Flume

FlumeCloudera提供的一个分布式、可靠、和高可用的海量日志采集、聚合和传输的日志收集系统,支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

下图为flume典型的体系结构:

Flume数据源以及输出方式:

Flume提供了从console(控制台)RPC(Thrift-RPC)text(文件)tail(UNIX tail)syslog(syslog日志系统,支持TCPUDP2种模式)exec(命令执行)等数据源上收集数据的能力,在我们的系统中目前使用exec方式进行日志采集。

Flume 的数据接受方,可以是 console( 控制台 ) text( 文件 ) dfs(HDFS 文件 ) RPC(Thrift-RPC) syslogTCP(TCP syslog 日志系统 ) 等。在我们系统中由 kafka 来接收。

Flume下载及文档:

http://flume.apache.org/

Flume安装:

$tar zxvf apache-flume-1.4.0-bin.tar.gz/usr/local

Flume启动命令:

$bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name producer -Dflume.root.logger=INFO,console


Kafka

kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性:

  • 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
  • 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。
  • 支持通过kafka服务器和消费机集群来分区消息。
  • 支持Hadoop并行数据加载。

kafka的目的是提供一个发布订阅解决方案,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。

kafka分布式订阅架构如下图:--取自Kafka官网

罗宝兄弟文章上的架构图是这样的

其实两者没有太大区别,官网的架构图只是把Kafka简洁的表示成一个Kafka Cluster,而罗宝兄弟的架构图就相对详细一些;

Kafka版本:0.8.0

Kafka下载及文档:http://kafka.apache.org/

Kafka安装:

> tar xzf kafka-<VERSION>.tgz
> cd kafka-<VERSION>
> ./sbt update
> ./sbt package
> ./sbt assembly-package-dependency

启动及测试命令:

1 start server

> bin/zookeeper-server-start.shconfig/zookeeper.properties
> bin/kafka-server-start.shconfig/server.properties
这里是官网上的教程,kafka本身有内置zookeeper,但是我自己在实际部署中是使用单独的zookeeper集群,所以第一行命令我就没执行,这里只是些出来给大家看下。

配置独立的zookeeper集群需要配置server.properties文件,讲zookeeper.connect修改为独立集群的IP和端口

zookeeper.connect=nutch1:2181

2Create a topic

> bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic test
> bin/kafka-list-topic.sh --zookeeperlocalhost:2181

3Send some messages

> bin/kafka-console-producer.sh--broker-list localhost:9092 --topic test

4Start a consumer

> bin/kafka-console-consumer.sh--zookeeper localhost:2181 --topic test --from-beginning

kafka-console-producer.shkafka-console-cousumer.sh只是系统提供的命令行工具。这里启动是为了测试是否能正常生产消费;验证流程正确性

在实际开发中还是要自行开发自己的生产者与消费者;

kafka的安装也可以参考我之前写的文章:http://blog.csdn.net/weijonathan/article/details/18075967

Storm

Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,它被托管在 GitHub 上,遵循 Eclipse Public License 1.0。Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。GitHub上的最新版本是Storm 0.5.2,基本是用 Clojure 写的。


Storm的主要特点如下:

  1. 简单的编程模型。类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
  2. 可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
  3. 容错性。Storm会管理工作进程和节点的故障。
  4. 水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
  5. 可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
  6. 快速。系统的设计保证了消息能得到快速的处理,使用ØMQ作为其底层消息队列。(0.9.0.1版本支持ØMQ和netty两种模式)
  7. 本地模式。Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
由于篇幅问题,具体的安装步骤可以参考我之前写的文章:http://blog.csdn.net/weijonathan/article/details/17762477

接下来重头戏开始拉!那就是框架之间的整合啦

flumekafka整合

1.下载flume-kafka-plus:https://github.com/beyondj2ee/flumeng-kafka-plugin

2.提取插件中的flume-conf.properties文件

修改该文件:#source section

producer.sources.s.type = exec
producer.sources.s.command = tail -f -n+1 /mnt/hgfs/vmshare/test.log
producer.sources.s.channels = c

修改所有topic的值改为test

将改后的配置文件放进flume/conf目录下

在该项目中提取以下 jar 包放入环境中 flume lib 下:


注:这里的flumeng-kafka-plugin.jar这个包,后面在github项目中已经移动到package目录了。找不到的童鞋可以到package目录获取。

完成上面的步骤之后,我们来测试下flume+kafka这个流程有没有走通;

我们先启动flume,然后再启动kafka,启动步骤按之前的步骤执行;接下来我们使用kafka的kafka-console-consumer.sh脚本查看是否有flume有没有往Kafka传输数据;


以上这个是我的test.log文件通过flume抓取传到kafka的数据;说明我们的flume和kafka流程走通了;

大家还记得刚开始我们的流程图么,其中有一步是通过flume到kafka,还有一步是到hdfs的;而我们这边还没有提到如何存入kafka且同时存如hdfs;

flume是支持数据同步复制,同步复制流程图如下,取自于flume官网,官网用户指南地址:http://flume.apache.org/FlumeUserGuide.html


怎么设置同步复制呢,看下面的配置:

#2个channel和2个sink的配置文件  这里我们可以设置两个sink,一个是kafka的,一个是hdfs的;
a1.sources = r1
a1.sinks = k1 k2
a1.channels = c1 c2
具体配置大伙根据自己的需求去设置,这里就不具体举例了

kafka和storm的整合

1.下载kafka-storm0.8插件:https://github.com/wurstmeister/storm-kafka-0.8-plus

2.使用maven package进行编译,得到storm-kafka-0.8-plus-0.3.0-SNAPSHOT.jar包  --有转载的童鞋注意下,这里的包名之前写错了,现在改正确了!不好意思!

3.将该jar包及kafka_2.9.2-0.8.0-beta1.jar、metrics-core-2.2.0.jar、scala-library-2.9.2.jar (这三个jar包在kafka项目中能找到)

备注:如果开发的项目需要其他 jar ,记得也要放进 storm Lib 中比如用到了 mysql 就要添加 mysql-connector-java-5.1.22-bin.jar storm lib

那么接下来我们把storm也重启下;

完成以上步骤之后,我们还有一件事情要做,就是使用kafka-storm0.8插件,写一个自己的Storm程序;

这里我给大伙附上一个我弄的storm程序,百度网盘分享地址:http://pan.baidu.com/s/1mgp0LLY

先稍微看下程序的创建Topology代码


数据操作主要在WordCounter类中,这里只是使用简单JDBC进行插入处理


这里只需要输入一个参数作为Topology名称就可以了!我们这里使用本地模式,所以不输入参数,直接看流程是否走通;

storm-0.9.0.1/bin/storm jar storm-start-demo-0.0.1-SNAPSHOT.jar com.storm.topology.MyTopology

先看下日志,这里打印出来了往数据库里面插入数据了


然后我们查看下数据库;插入成功了!


到这里我们的整个整合就完成了!

但是这里还有一个问题,不知道大伙有没有发现。这个也是@晨色星空J2EE跟我说的,其实我也应该想到的;

由于我们使用storm进行分布式流式计算,那么分布式最需要注意的是数据一致性以及避免脏数据的产生;所以我提供的测试项目只能用于测试,正式开发不能这样处理;

@晨色星空J2EE给的建议是建立一个zookeeper的分布式全局锁,保证数据一致性,避免脏数据录入!

zookeeper客户端框架大伙可以使用Netflix Curator来完成,由于这块我还没去看,所以只能写到这里了!

这里在一次谢谢罗宝和@晨色星空!


转载的话请注明来源地址:http://blog.csdn.net/weijonathan/article/details/18301321 和 http://www.51studyit.com/html/notes/20140312/14.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39671.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记之信息量、熵、KL散度、交叉熵的一些介绍

文章目录 信息量熵KL散度&#xff08;相对熵&#xff09;交叉熵参考 信息量 以前我也一直只是知道信息量的计算公式&#xff0c;也有想过为什么会是这样&#xff0c;但是因为要学的东西太多了&#xff0c;就没怎么深究&#xff0c;直到看了“交叉熵”如何做损失函数&#xff1…

AI产品经理是如何理解机器学习的(附注释)

本期目的&#xff1a;回顾之前敲代码的日常&#xff0c;利用生活场景帮助AI产品经理认识机器学习及学习过程中常用算法和评价指标。 适用读者&#xff1a;AI/数据产品经理。 阅读重点&#xff1a;品&#xff0c;细品&#xff0c;结合班级故事再品。 最近看了很多关于机器学习…

卢伟冰称小米今年库存会回到更健康水位 将加大门店整合调整

雷递网 乐天 3月25日 小米集团&#xff08;股票代码为&#xff1a;1810&#xff09;今日发布财报&#xff0c;财报显示&#xff0c;小米集团2022年营收为2800亿元&#xff0c;较上年同期的3283亿元下降14.7%。小米2022年经调净利为85亿元。 小米2022年第四季度营收为660.47亿元…

小米年营收2800亿:经调整利润85亿 电动汽车业务投入31亿

雷递网 雷建平 3月24日 小米集团&#xff08;股票代码为&#xff1a;1810&#xff09;今日发布财报&#xff0c;财报显示&#xff0c;小米集团2022年营收为2800亿元&#xff0c;较上年同期的3283亿元下降14.7%。 2022年&#xff0c;小米集团的境外市场收入为1378亿元&#xff0…

什么是低代码开发平台(apaas)?低代码开发平台的价值有哪些

手码6500字&#xff0c;带你快速看懂&#xff1a;什么是低代码开发平台&#xff08;apaas&#xff09;&#xff0c;低代码有哪些价值&#xff0c;以及低代码平台的使用逻辑和心得。 一、什么是低代码开发平台&#xff08;apaas&#xff09;&#xff1f; 低代码开发平台是一种a…

详解如何在ChatGPT内构建一个Python解释器

这篇文章主要为大家详细介绍了如何在ChatGPT内构建一个Python解释器&#xff0c;文中的示例代码讲解详细&#xff0c;具有一定的学习价值&#xff0c;需要的可以参考一下 目录 引用&#xff1a;Art Kulakov 《How to Build a Python Interpreter Inside ChatGPT》 这个灵感来自…

如何画各种“图”?

我们在写文档过程中&#xff0c;多多少少都会画一些图来说明程序的功能&#xff0c;这篇文章就来说明一些常用的"图"怎么画。 1&#xff0c;画图工具 常用的有这么几种 Visio&#xff1a;这是很常用的&#xff0c;基本上的图都可以用这个来画。StarUML&#xff1a…

patreon cg人物插画作品合集分享

1、wlop大神作品4K-8K精选无水印图片http://theme.chengxuz.com/265.html 2、加拿大女画师sakimi chan作品1-98期插画http://theme.chengxuz.com/250.html 3、画师Mirco Cabbia插画作品合集欣赏http://theme.chengxuz.com/306.html 4、画师Sciamano240插画作品分享http://th…

如何画场景插画?场景插画的起稿、构图技巧!

如何画场景插画&#xff1f;绘画初学者如何构图&#xff1f;绘画初学者如何起稿&#xff1f;学习绘画难吗&#xff1f;怎样才能学好绘画&#xff1f;想必这些都是绘画初学者们经常在想的问题吧&#xff0c;就是不知道如何才能绘画好一个场景&#xff0c;不知道如何起稿也不知道…

手把手教你实现手绘风格图形

大家好&#xff0c;我是 漫步&#xff0c;今天分享一篇高难度的图形绘制文章。 Rough.js[1]是一个手绘风格的图形库&#xff0c;提供了一些基本图形的绘制能力&#xff0c;比如&#xff1a;虽然笔者是个糙汉子&#xff0c;但是对这种可爱的东西都没啥抵抗力&#xff0c;这个库的…

Python自动绘制UML类图、函数调用图(Call Graph)

文章目录 1. 引言2. 绘制UML类图2.1 安装graphviz2.2 安装pyreverse2.3 绘制UML类图 3. 绘制函数调用图3.1 安装graphviz3.2 安装pycallgraph3.3 使用示例第一种&#xff1a;从命令行调用第二种&#xff1a;从API调用 小结 1. 引言 在设计软件、分析代码时&#xff0c;我们常常…

房价预测2

学习&#xff1a; https://blog.csdn.net/u012063773/article/details/79349256 https://www.cnblogs.com/massquantity/p/8640991.html https://zhuanlan.zhihu.com/p/39429689 详解stacking过程 之前在房价预测1中对一些异常值进行了drop处理 后来在分割train和test的时候…

深圳二手房房价分析及预测

分析目标&#xff1a; 通过处理后的房价数据&#xff0c;筛选对房价有显著影响的特征变量。确定特征变量&#xff0c;建立深圳房价预测模型并对假设情景进行模拟 数据预处理 import pandas as pd import os file_path"D:\Python数据分析与挖掘实战\深圳二手房价分析\…

波士顿房价预测

目录 前言一、波士顿房价预测实战1-1、数据集介绍&数据集导入&分割数据集1-2、数据标准化1-3、构建网络1-4、K折交叉验证&取出所有的训练损失、训练平均绝对误差、验证损失、验证平均绝对误差1-5、计算平均mae&绘制验证mae分数&绘制验证loss分数1-6、找到最…

房价多特征预测

2019.11.18 首先非常感谢这位作者&#xff0c;写的很棒&#xff01;你们就不要看我的啦&#xff0c;看他的⬇️⬇️ 学习来自 https://blog.csdn.net/sinat_29957455/article/details/79255675 下面的内容为自己学习笔记: 学习Kaggle&#xff5e;ing 这次给出的特征有点儿多啊…

北京房价预测图说

前言 曾听人说过&#xff0c;中国经济是房地产市场&#xff0c;美国经济是股票市场。中国房地产市场超过400万亿&#xff0c;房地产总值是美国、欧盟、日本总和&#xff0c;但是股市才50万亿&#xff0c;不到美欧日的十分之一。可见房地产对于中国来说地位尤其明显&#xff01…

苹果App Store商店中国区如何改为美国区

苹果App Store商店中国区如何改为美国区 Hello大家好&#xff01;苹果外区id是每个苹果手机必不可少的啦&#xff01;不是国外有多好而是国内的大部分软件都有限制&#xff0c;一开始我百度了一下内容太乱太杂了真的都是“bullshit”,下面直接上教程。 第一首先要一个国内的苹…

二手平台淘的明星同款穿搭?上95分看看

作为一个喜欢穿搭的潮流人士&#xff0c;我拥有许多明星同款&#xff0c;但拥有的越多&#xff0c;我的钱包就越扁。 但尽管是在这样的情况下&#xff0c;我依然不能放弃给它们&#xff08;指衣服鞋子&#xff09;一个家&#xff0c;所以我知道了95分&#xff0c;认识了95分&a…

《VogueMe》手写问答新鲜出炉!这字体很李易峰!

爱豆新闻讯 昨日晚间&#xff0c;《VogueMe》官博送上端午小福利――我们小哥哥的手写问答新鲜出炉啦&#xff01;蜜蜂们纷纷表示&#xff0c;瞧这字体一看就知道是出自我方木哥~ 最后&#xff0c;期待我哥在电影《心理罪》里的表现&#xff0c;小编表示已经迫不及待想见方木了…

pythonif语句怎么换行输入_李沁和李易峰演的电视剧叫什么名字

第一现纠在出掌握证据录音录像历印病常会存复纷后、封时间&#xff0c;的维权意强患方来越由于识越。 每月李女养费0元付抚士支&#xff0c;女由达成高先协议最终养&#xff1a;长双方生抚。他又女儿带着悄悄亲子做了鉴定&#xff0c;为了打消的疑自己虑&#xff0c;对恩高先妻…