Kafka框架基礎
* Kafka框架基礎
官網:kafka.apache.org
框架簡介
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:
** 解壓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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
Kafka框架基礎