官網:kafka.apache.orgapache
框架簡介tomcat
Apache Kafka是分佈式發佈-訂閱消息系統。它最初由LinkedIn公司開發,以後成爲Apache項目的一部分。Kafka是一種快速、可擴展的、設計內在就是分佈式的,分區的和可複製的提交日誌服務。安全
相關概念架構
** 生產者併發
提供數據源生產的地方,對於同一個topic,生產者只能有一個,這樣能夠確保同一個topic數據來自同一個業務數據,支持多併發框架
** 消費者分佈式
消費數據的客戶端,對於同一個topic,能夠有多個消費者,好比spark,storm等等高併發
** Broker測試
消息中間件處理結點,一個Kafka節點就是一個broker,多個broker能夠組成一個Kafka集羣。大數據
** Topic
同一類消息的統稱,Kafka集羣可以同時負載多個topic分發。
** Partition
topic物理上的分組,一個topic能夠分爲多個partition,每一個partition是一個有序的隊列,同一個topic裏面的數據是存放在不一樣的分區中。
** Replication
每一個分區或者topic都是有副本的,副本的數量也是能夠在建立topic的時候就指定好,保證數據的安全性,以及提供高併發讀取效率。
** Segment
partition物理上由多個segment組成
** Offset
每一個partition都由一系列有序的、不可變的消息組成,這些消息被連續的追加到partition中。partition中的每一個消息都有一個連續的序列號叫作offset,用於partition惟一標識一條消息
框架特點
** 同時爲發佈和訂閱提供高吞吐量。Kafka每秒能夠生產約25萬消息(約50 MB),每秒處理55萬消息(約110 MB)。
** 可進行持久化操做。將消息持久化到磁盤,所以可用於批量消費,例如ETL,以及實時應用程序。經過將數據持久化到硬盤以及replication防止數據丟失。
** 分佈式系統,易於向外擴展。全部的producer、broker和consumer都會有多個,均爲分佈式的。無需停機便可擴展機器。
** 消息被處理的狀態是在consumer端維護,而不是由server端維護。當失敗時能自動平衡。
架構圖
** 相關下載
kafka以及scala:連接:http://pan.baidu.com/s/1pLBFJf1 密碼:seto
** 解壓Kafka以及scala
$ tar -zxf kafka_2.10-0.8.2.1.tgz -C /opt/modules/cdh/
$ tar -zxf scala-2.10.4.tgz -C /opt/modules/cdh/
** 安裝JDK並配置環境變量
再也不贅述
** 安裝並啓動zookeeper
在zookeeper的根目錄下:
$ bin/zkServer.sh start
** 配置scala環境變量
# vi /etc/profile
$ source /etc/profile
(注意以上兩條語句的執行用戶)
添加以下:
##SCALA_HOME
SCALA_HOME=/opt/modules/cdh/scala-2.10.4
export PATH=$PATH:$SCALA_HOME/bin
使用命令檢查scala配置是否正確:
$ scala -version,如圖:
** 修改Kafka配置文件
server.properties
修改成以下:
producer.properties
變更內容以下:
consumer.properties
變更內容以下:
** 啓動Kafka
$ bin/kafka-server-start.sh config/server.properties
** 建立Topic
$ bin/kafka-topics.sh --create --zookeeper z01:2181 --replication-factor 1 --partitions 1 --topic testTopic
** 啓動生產者
$ bin/kafka-console-producer.sh --broker-list z01:9092 --topic testTopic
** 啓動消費者
$ bin/kafka-console-consumer.sh --zookeeper z01:2181 --topic testTopic --from-beginning
在生產者窗口輸入數據,在消費者窗口查看數據,測試如圖:
消費者:
生產者:
使用flume+kafka整合測試
** 配置flume
原來咱們配置flume,是在tomcat所在機器節點開啓了一個flume收集日誌,並直接上傳到HDFS,若是集羣中存在多個機器節點,則勢必致使對HDFS集羣佔用率太高,因此在面臨多個flume集羣時,通常會採用1~2個單獨的flume節點來收集另外flume節點的日誌,至關於弄了一箇中轉站,由中轉站收集其餘flume,再統一放置到HDFS系統中,此刻咱們採用方案2,原理如圖:
背景:在一臺機器上開兩個flume,分別收集tomcat日誌和hive日誌,這二者的日誌信息分別輸入到中間層flume(這個中間層flume也模擬在同一個機器節點上),而後中間層flume在將數據寫入到HDFS。
首先檢查一下hive的conf目錄下的hive-log4j.properties配置中,是否已經指定了hive的日誌目錄,若是沒有,請指定,如圖:
涉及flume文件:如下文件存在於flume的conf目錄下,若是不存在,請自行建立便可。
flume-apache-log-kafka.conf
flume-hive-log-kafka.conf
flume-connector-kafka.conf
依次啓動:
a4:
$ bin/flume-ng agent --conf conf/ --name a4 --conf-file conf/flume-connector-kafka.conf
a3:
$ bin/flume-ng agent --conf conf/ --name a3 --conf-file conf/flume-hive-log-kafka.conf
a2:
$ bin/flume-ng agent --conf conf/ --name a2 --conf-file conf/flume-apache-log-kafka.conf
測試後如圖,便可發現,日誌在HDFS和kafka中都已經顯示出來:
我的微博:http://weibo.com/seal13
QQ大數據技術交流羣(廣告勿入):476966007
做者:Z盡際連接:https://www.jianshu.com/p/a24af7a86392來源:簡書著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。