1. 程式人生 > >Kafka框架基礎

Kafka框架基礎

orien server pan tor container 持久化 /etc/ flume zookeeper

* 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:

鏈接: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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

Kafka框架基礎