mysql storm_flume+kafka+storm+mysql架构设计
前段時間學習了storm,最近剛開blog,就把這些資料放上來供大家參考。 這個框架用的組件基本都是最新穩定版本,flume-ng1.4+kafka0.8+storm0.9+mysql(項目是maven項目,需要改動mysql配置,提供兩種topology:讀取本地文件(用來本地測試);讀取服務器日志文件。)
(是visio畫的,圖太大,放上來字看起來比較小,如果有需要的朋友留郵箱)
實時日志分析系統架構簡介
系統主要分為四部分:
負責從各節點上實時采集數據,選用cloudera的flume來實現
由于采集數據的速度和數據處理的速度不一定同步,因此添加一個消息中間件來作為緩沖,選用apache的kafka
對采集到的數據進行實時分析,選用apache的storm
對分析后的結果持久化,暫定用mysql
操作系統:centos6.4
Flume是Cloudera提供的一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸的日志收集系統,支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據進行簡單處理,并寫到各種數據接受方(可定制)的能力。
下圖為flume典型的體系結構:
Flume數據源以及輸出方式:
Flume提供了從console(控制臺)、RPC(Thrift-RPC)、
text(文件)、tail(UNIX
tail)、syslog(syslog日志系統,支持TCP和UDP等2種模式),exec(命令執行)等數據源上收集數據的能力,在我們的系統中目前
使用exec方式進行日志采集。
Flume的數據接受方,可以是console(控制臺)、text(文件)、dfs(HDFS文件)、RPC(Thrift-RPC)和syslogTCP(TCP syslog日志系統)等。在我們系統中由kafka來接收。
Flume版本:1.4.0
$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
注意事項:需要更改conf目錄下的配置文件,并且添加jar包到lib目錄下。
Kafka是一個消息中間件,它的特點是:
1、關注大吞吐量,而不是別的特性
2、針對實時性場景
3、關于消息被處理的狀態是在consumer端維護,而不是由kafka server端維護。
4、分布式,producer、broker和consumer都分布于多臺機器上。
下圖為kafka的架構圖:
Kafka版本:0.8.0
Kafka下載及文檔:http://kafka.apache.org/
Kafka安裝:
> tar xzf kafka-.tgz
> cd kafka-
> ./sbt update
> ./sbt package
> ./sbt assembly-package-dependency Kafka
啟動及測試命令:
(1) start server
> bin/zookeeper-server-start.sh config/zookeeper.properties
> bin/kafka-server-start.sh config/server.properties
(2)Create a topic
> bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic test
> bin/kafka-list-topic.sh --zookeeper localhost:2181
(3)Send some messages
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
(4)Start a consumer
> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
Storm是一個分布式的、高容錯的實時計算系統。
Storm架構圖:
storm工作任務topology:
Storm 版本:0.9.0
Storm 下載:Storm安裝:
第一步,安裝Python2.7.2
# wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
# tar zxvf Python-2.7.2.tgz
# cd Python-2.7.2
# ./configure
# make
# make install
# vi /etc/ld.so.conf
第二步,安裝zookeeper(kafka自帶zookeeper,如果選用kafka的,該步可省略)
#wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//zookeeper/zookeeper-3.3.3/zoo keeper-3.3.3.tar.gz
# tar zxf zookeeper-3.3.3.tar.gz
# ln -s /usr/local/zookeeper-3.3.3/ /usr/local/zookeeper
# vi ~./bashrc (設置ZOOKEEPER_HOME和ZOOKEEPER_HOME/bin)
第三步,安裝JAVA
$tar zxvf ?jdk-7u45-linux-x64.tar.gz ?/usr/local
jzmq的安裝貌似是依賴zeromq的,所以應該先裝zeromq,再裝jzmq。
這是因為沒有安裝uuid相關的package。
# yum install e2fsprogs*
2)安裝jzmq(非必須)
第五步,安裝storm
$unzip storm-0.9.0-wip16.zip
備注:單機版不需要修改配置文件,分布式在修改配置文件時要注意:冒號后必須加空格。
測試storm是否安裝成功:
如果沒有安裝過maven,參見如下步驟安裝:
tar zxvf apache-maven-3.1.1-bin.tar.gz /usr/local
配置maven環境變量
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
驗證maven是否安裝成功:mvn -v
修改Storm-Starter的pom文件m2-pom.xml ,修改dependency中twitter4j-core 和 twitter4j-stream兩個包的依賴版本,如下:
twitter4j-core
twitter4j-stream
[2.2,)
編譯完后生成target文件夾
啟動zookeeper
zkServer.sh start
啟動nimbus supervisor ui
storm nimbus
storm supervisor
storm ui
jps查看啟動狀態
進入target目錄執行:
storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology wordcountTop
然后查看http://localhost:8080
注釋:單機版 不用修改storm.yaml
kafka和storm整合
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-storm-0.8-plus項目依賴中能找到)
備注:如果開發的項目需要其他jar,記得也要放進storm的Lib中比如用到了mysql就要添加mysql-connector-java-5.1.22-bin.jar到storm的lib下
flume和kafka整合
修改該文件:#source section
producer.sources.s.type = exec
修改所有topic的值改為test
將改后的配置文件放進flume/conf目錄下
在該項目中提取以下jar包放入環境中flume的lib下:
以上為單機版的flume+kafka+storm的配置安裝
flume+storm插件
https://github.com/xiaochawan/edw-Storm-Flume-Connectors
安裝好storm,flume,kafka之后開始項目部署啟動(在部署啟動之前最好按照安裝文檔進行storm kafka flume各個組件測試)。
第一步
將編寫好的storm項目打成jar包放入服務器上,假如放在/usr/local/project/storm.xx.jar
注:關于storm項目的編寫見安裝文檔中的 kafka和storm整合 。
第二步
啟動zookeeper(這里可以啟動kafka自帶的zookeeper或者啟動單獨安裝的kafka,以下以kafka自帶為例)
cd /usr/local/kafka
創建主題
注:因為kafka消息的offset是由zookeeper記錄管理的,所以在此需指定zookeeper的ip,replica 表示該主題的消息被復制幾份,partition 表示每份主題被分割成幾部分。test表示主題名稱。
> storm supervisor
cd /usr/local/project/
注:storm.xx.jar 為我們編寫好的storm項目jar包,第一步完成的工作。 storm.testTopology 為storm項目中main方法所在的類路徑。test為此次topology的名字。
第五步
啟動flume
cd /usr/local/flume
bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name producer
注:flume.conf.properties為我們自定義的flume配置文件,flume安裝好后是沒有此文件的,需要我們自己編寫,編寫方式見flume安裝的文章。
至此需要啟動的程序已經全部啟動,storm項目已經開始運行,可以打開storm ui 觀察運行是否正常。
http://localhost:8080
注:此處ip為storm nimbus所在機器Ip 端口可在storm配置文件 storm/conf/storm.yaml中修改
總結
以上是生活随笔為你收集整理的mysql storm_flume+kafka+storm+mysql架构设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 顺丰旗下有哪些子公司
- 下一篇: mysql中约束_【MySQL】:MyS