flume+kafka+storm+mysql架構設計
感謝大家的關注,從寫這篇部落格到現在經過不少時間了。
最近重新回顧storm發現改動還是挺多的。
我重新整理的篇最新版的安裝筆記:點選開啟連結
版本:
序言
前段時間學習了storm,最近剛開blog,就把這些資料放上來供大家參考。
這個框架用的元件基本都是最新穩定版本,flume-ng1.4+kafka0.8+storm0.9+mysql
如果有需要測試專案程式碼的朋友,留下郵箱。
(專案是maven專案,需要改動mysql配置,提供兩種topology:讀取本地檔案(用來本地測試);讀取伺服器日誌檔案。)
架構圖
資料流向圖
(是visio畫的,圖太大,放上來字看起來比較小,如果有需要的朋友留郵箱)
實時日誌分析系統架構簡介
系統主要分為四部分:
1).資料採集
負責從各節點上實時採集資料,選用cloudera的flume來實現
2).資料接入
由於採集資料的速度和資料處理的速度不一定同步,因此新增一個訊息中介軟體來作為緩衝,選用apache的kafka
3).流式計算
對採集到的資料進行實時分析,選用apache的storm
4).資料輸出
對分析後的結果持久化,暫定用mysql
詳細介紹各個元件及安裝配置:
作業系統:centos6.4
Flume
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
Flume下載及文件:
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
注意事項:需要更改conf目錄下的配置檔案,並且新增jar包到lib目錄下。
Kafka
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-<VERSION>.tgz
> cd kafka-<VERSION>
> ./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架構圖:
storm工作任務topology:
Storm 版本:0.9.0
Storm 下載:http://storm-project.net/
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
如果使用storm0.9以下版本需要安裝zeromq及jzmq。
第四步,安裝zeromq以及jzmq
jzmq的安裝貌似是依賴zeromq的,所以應該先裝zeromq,再裝jzmq。
1)安裝zeromq(非必須):
- # wget http://download.zeromq.org/historic/zeromq-2.1.7.tar.gz
- # tar zxf zeromq-2.1.7.tar.gz
- # cd zeromq-2.1.7
- # ./configure
- # make
- # make install
- # sudo ldconfig (更新LD_LIBRARY_PATH)
之後遇到的問題是:Error:cannot link with -luuid, install uuid-dev
這是因為沒有安裝uuid相關的package。
解決方法是:# yum install uuid*
# yum install e2fsprogs*
# yum install libuuid*
2)安裝jzmq(非必須)
- # yum install git
- # git clone git://github.com/nathanmarz/jzmq.git
- # cd jzmq
- # ./autogen.sh
- # ./configure
- # make
- # make install
然後,jzmq就裝好了,這裡有個網站上參考到的問題沒有遇見,遇見的童鞋可以參考下。在./autogen.sh這步如果報錯:autogen.sh:error:could not find libtool is required to run autogen.sh,這是因為缺少了libtool,可以用#yum install libtool*來解決。
如果安裝的是storm0.9及以上版本不需要安裝zeromq和jzmq,但是需要修改storm.yaml來指定訊息傳輸為netty:
storm.local.dir: "/tmp/storm/data"
storm.messaging.transport: "backtype.storm.messaging.netty.Context"
storm.messaging.netty.server_worker_threads: 1
storm.messaging.netty.client_worker_threads: 1
storm.messaging.netty.buffer_size: 5242880
storm.messaging.netty.max_retries: 100
storm.messaging.netty.max_wait_ms: 1000
storm.messaging.netty.min_wait_ms: 100
第五步,安裝storm
$unzip storm-0.9.0-wip16.zip
備註:單機版不需要修改配置檔案,分散式在修改配置檔案時要注意:冒號後必須加空格。
測試storm是否安裝成功:
1. 下載strom starter的程式碼 git clone https://github.com/nathanmarz/storm-starter.git
2. 使用mvn -f m2-pom.xml package 進行編譯
如果沒有安裝過maven,參見如下步驟安裝:
1.從maven的官網下載http://maven.apache.org/
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兩個包的依賴版本,如下:
org.twitter4j
twitter4j-core
[2.2,)
org.twitter4j
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整合
1.下載kafka-storm0.8外掛:https://github.com/wurstmeister/storm-kafka-0.8-plus
2.該專案下載下來需要除錯下,找到依賴jar包。然後重新打包,作為我們的storm專案的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-storm-0.8-plus專案依賴中能找到)
備註:如果開發的專案需要其他jar,記得也要放進storm的Lib中比如用到了mysql就要新增mysql-connector-java-5.1.22-bin.jar到storm的lib下
flume和kafka整合
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下:
以上為單機版的flume+kafka+storm的配置安裝
flume+storm外掛
https://github.com/xiaochawan/edw-Storm-Flume-Connectors
啟動步驟
將編寫好的storm專案打成jar包放入伺服器上,假如放在/usr/local/project/storm.xx.jar
bin/zookeeper-server-start.sh config/zookeeper.properties
第三步
啟動kafka
cd /usr/local/kafka
> bin/kafka-server-start.sh config/server.properties
建立主題
> bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic test
注:因為kafka訊息的offset是由zookeeper記錄管理的,所以在此需指定zookeeper的ip,replica 表示該主題的訊息被複制幾份,partition 表示每份主題被分割成幾部分。test表示主題名稱。第四步
啟動storm> storm nimbus
> storm supervisor
> storm ui
cd /usr/local/project/
> storm jar storm.xx.jar storm.testTopology test
注: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中修改
相關文章
- 架構設計思想-微服務架構設計模式架構微服務設計模式
- 架構設計架構
- 遊戲架構 遊戲架構設計(8)遊戲架構
- Nginx架構設計Nginx架構
- groupcache 架構設計PCA架構
- Tumblr 架構設計架構
- 架構與設計架構
- 架構設計之一——基礎架構架構
- 架構設計之架構的演變架構
- 架構師修煉之道(二)——架構?設計?架構師?架構
- SaaS架構:開放平臺架構設計架構
- 網站架構設計網站架構
- 架構設計方法論架構
- 面向架構程式設計架構程式設計
- 架構設計(九):估算架構
- 架構設計方法初探架構
- MVP架構設計 初探MVP架構
- 軟體架構設計架構
- WebService Soap架構設計Web架構
- 架構、框架、設計模架構框架
- 學習架構設計架構
- 企業架構設計?架構
- 如何設計app架構?APP架構
- 常用的設計架構架構
- 軟體架構設計原則和模式(上):分層架構設計架構模式
- spark架構設計&程式設計模型01Spark架構程式設計模型
- 讀《前端架構設計》 兼談架構與框架前端架構框架
- SaaS架構:多租戶系統架構設計架構
- SaaS架構:中央庫存系統架構設計架構
- 【Apollo】(2)--- Apollo架構設計架構
- 秒殺架構模型設計架構模型
- Fresco架構設計賞析架構
- 小程式渲染架構設計架構
- UI架構設計的演化UI架構
- 如何精心設計CDN架構架構
- 理解Underscore的設計架構架構
- Dubbo架構設計詳解架構
- 事件驅動架構設計事件架構