Kafka安裝與整合flume,Sparkstreaming的簡單實例測試

Kafka是一種高吞吐量的分佈式消息系統,Kafka的目的是通過Hadoop的並行加載機制來統一線上和離線的消息處理,也是爲了通過集羣機來提供實時的消費。下面介紹有關Kafka的簡單安裝和使用,想全面瞭解Kafka,請訪問Kafka的官方博客http://kafka.apache.org/
首先要玩Kafka必須依賴於zookeeper,所以在安裝Kafka之前首先得安裝zookeeper
安裝zookeeper很簡單,按照cloudera官網的做法https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cdh_ig_zookeeper_installation.html#topic_21

Apache ZooKeeper是一種高度可靠且可用的服務,可在分佈式進程之間提供協調。

注意: 有關詳細信息
Apache ZooKeeper站點:
http://zookeeper.apache.org/。
ZooKeeper是一種用於分佈式應用程序的高性能協調服務。它在一個簡單的界面中公開了常用服務 - 例如命名,配置管理,同步和組服務 - 因此您不必從頭開始編寫它們。您可以使用現成的方法來實現共識,組管理,領導者選舉和在線協議。您可以根據自己的特定需求進行構建。
本次使用的是Centos6.7系統在三臺虛擬機器上使用yum源下載zookeeper
安裝zookeeper基礎包
sudo yum install zookeeper
安裝zookeeper服務器包
sudo yum install zookeeper-server
要創建/ var / lib / zookeeper並設置權限:
mkdir -p /var/lib/zookeeper
chown -R zookeeper /var/lib/zookeeper/
如果在全新安裝後部署多個ZooKeeper服務器,則需要創建一個 myid文件在數據目錄中。你可以通過一個方法來做到這一點 在裏面 命令選項:
三臺機器依次進行,
sudo service zookeeper-server init --myid = 1
sudo service zookeeper-server init --myid = 2
sudo service zookeeper-server init --myid = 3
啓動或者重啓zookeeper服務進程
sudo service zookeeper-server start
sudo service zookeeper-server restart
部署ZooKeeper集合需要一些額外的配置。配置文件(zoo.cfg)在每個服務器上必須包含集合中所有服務器的列表,並且每個服務器還必須具有 我的身份 文件在其數據目錄中(默認情況下) 在/ var / lib中/飼養員)它將其標識爲整體中的一個服務器。在每臺服務器上進行如下操作。
使用單個服務器 上安裝ZooKeeper服務器包和啓動ZooKeeper下的命令進行安裝動物園管理員服務器 在每個主機上。
測試預期的負載以設置Java堆大小以避免交換。確保您遠低於系統開始交換的閾值; 例如12GB用於具有16GB RAM的機器。
創建配置文件。可以根據需要調用此文件,並且必須至少指定ZooKeeper管理員指南中 “最低配置”下顯示的參數的設置。您還應該爲其配置值initLimit, syncLimit,和 服務器。ñ; 見說明管理員指南中。例如:
滾動時間= 2000
DATADIR =的/ var / lib中/動物園管理員/
CLIENTPORT = 2181
initLimit = 5
syncLimit = 2
server.1 = zoo1:2888:3888
server.2 = zoo2:2888:3888
server.3 = zoo3:2888:3888
在此示例中,最後三行是在表單中 服務器。id = hostname:port:port。第一個端口是集合中的跟隨者來聽取領導者的意見; 第二是領導選舉。您可以在下一步中爲每個服務器設置ID。
在服務器中創建名爲myid的文件DATADIR; 在這個例子中,/ var / lib / zookeeper / myid。該文件必須只包含一行,該行必須包含一個介於1和255之間的唯一編號。這是上一步中提到的id組件。在此示例中,主機名爲的服務器zoo1必須有一個僅包含的myid文件1。
按照上一節中的說明啓動每個服務器。
通過運行ZooKeeper客戶端來測試部署:
zookeeper-client

進行kafka的安裝測試,以及和flume,SparkStreaming的集成測試
cd /etc/yum.repos.d/
wget http://archive.cloudera.com/kafka/redhat/6/x86_64/kafka/cloudera-kafka.repo
vi cloudera-kafka.repo
將版本的3改爲2.0.0是本次使用的版本
sudo yum clean all
sudo yum install kafka
sudo yum install kafka-server
創建數據文件儲存目錄,自定義目錄
mkdir -p /data/log/kafka-logs
編輯每個節點上的/etc/kafka/conf/server.properties以確保broker.id對於
Kafka集羣中的每個節點和代理是唯一的,
並且zookeeper.connect指向所有節點和代理的相同ZooKeeper端口。

log.dirs=/etc/log/kafka-logs
zookeeper.connect=hadoop1:2181,hadoop2:2181,hadoop3:2181

在每臺節點上啓動kafka服務sudo service kafka-server start
要驗證所有節點是否已正確註冊到同一ZooKeeper,
請使用連接到動物園管理員客戶端
zookeeper-client
查看該zookeeper下有什麼kafka的id已經註冊
ls /brokers/ids
您應該會看到您在Kafka羣集中註冊的代理的所有ID。

要發現分配了特定ID的節點,請使用以下命令:
可以發現該zookeeper上的指定id的kafka服務器信息
get /brokers/ids/ID
進入日誌目錄查看日誌信息,用以排查錯誤
cd /var/log/kafka
tail -F server.log

/usr/bin/kafka-topics --zookeeper 服務器IP或者服務器名(使用服務器名要指定映射).com:2181 --list
創建topice
/usr/bin/kafka-topics --create --zookeeper hadoop3:2181 --replication-factor 3 --partitions 4 -topic topic_1
卡夫卡控制檯消費者
從Kafka主題中讀取數據並將其寫入標準輸出。例如:
/usr/bin/kafka-console-consumer --zookeeper hadoop3:2181 --topic topic_1
卡夫卡控制檯生產者
從標準輸出中讀取數據並將其寫入Kafka主題。例如:
/usr/bin/kafka-console-producer --broker-list hadoop2:9092,hadoop3:9092 -topic topic_1

/usr/bin/kafka-topics --describe --zookeeper localhost:2181 --topic test
進入/etc/flume-ng/conf/
創建相應的flume任務啓動配置文件,如flume.conf,flume_kafka.conf等
集體配置參數參考官網
https://www.cloudera.com/documentation/kafka/latest/topics/kafka_spark.html#xd_583c10bfdbd326ba-590cb1d1-149e9ca9886--6fed

配置參數文件flume_kafka.conf
內容如下:
tier1.sources = source1
tier1.channels = channel1
tier1.sinks = sink1

tier1.sources.source1.type = exec
tier1.sources.source1.command = /usr/bin/vmstat 1
tier1.sources.source1.channels = channel1

tier1.channels.channel1.type = memory
tier1.channels.channel1.capacity = 10000
tier1.channels.channel1.transactionCapacity = 1000

tier1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink
tier1.sinks.sink1.topic = sink1
tier1.sinks.sink1.brokerList = hadoop1:9092,hadoop2:9092,hadoop3:9092
tier1.sinks.sink1.channel = channel1
tier1.sinks.sink1.batchSize = 20
[root@hadoop1 conf]# cat flume_kafka.conf
tier1.sources = source1
tier1.channels = channel1
tier1.sinks = sink1

tier1.sources.source1.type = exec
tier1.sources.source1.command = /usr/bin/vmstat 1
tier1.sources.source1.channels = channel1

tier1.channels.channel1.type = memory
tier1.channels.channel1.capacity = 10000
tier1.channels.channel1.transactionCapacity = 1000

tier1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink
tier1.sinks.sink1.topic = sink1
tier1.sinks.sink1.brokerList = hadoop1:9092,hadoop2:9092,hadoop3:9092
tier1.sinks.sink1.channel = channel1
tier1.sinks.sink1.batchSize = 20

配置完成將flume採集到的數據流入kafka的flume_kafka.conf後按照如下命令啓動
/usr/lib/flume-ng/bin/flume-ng agent --conf /etc/flume-ng/conf --conf-file /etc/flume-ng/conf/flume_kafka.conf --name tier1 -Dflume.root.logger=INFO,console
Kafka中的消息隊列中的sink1是目標消息

配置參數文件kafka_flume.conf
內容如下:
tier2.sources = source1
tier2.channels = channel1
tier2.sinks = sink1

tier2.sources.source1.type = org.apache.flume.source.kafka.KafkaSource
tier2.sources.source1.kafka.bootstrap.servers = hadoop3:9092
tier2.sources.source1.kafka.topics = sink1
tier2.sources.source1.kafka.consumer.group.id = flume
tier2.sources.source1.channels = channel1
tier2.sources.source1.interceptors = i1
tier2.sources.source1.interceptors.i1.type = timestamp
tier2.sources.source1.kafka.consumer.timeout.ms = 100

tier2.channels.channel1.type = memory
tier2.channels.channel1.capacity = 10000
tier2.channels.channel1.transactionCapacity = 1000

tier2.sinks.sink1.type = hdfs
tier2.sinks.sink1.hdfs.path = /tmp/kafka/%{topic}/%y-%m-%d
tier2.sinks.sink1.hdfs.rollInterval = 5
tier2.sinks.sink1.hdfs.rollSize = 0
tier2.sinks.sink1.hdfs.rollCount = 0
tier2.sinks.sink1.hdfs.fileType = DataStream
tier2.sinks.sink1.channel = channel1

配置完成將kafka作爲數據源將flume採集到的數據流入HDFS的kafka——flume.conf後按照如下命令啓動
/usr/lib/flume-ng/bin/flume-ng agent --conf /etc/flume-ng/conf --conf-file /etc/flume-ng/conf/kafka_flume.conf --name tier2 -Dflume.root.logger=INFO,console
在HDFS下的/tmp/kafka/%{topic}/%y-%m-%d對應的消息變量值和相應時間段是輸出文件位置
配置將kafka的數據流入SparkStreaming的測試用例
/root/spark-1.6.0-bin-hadoop2.6/bin/run-example streaming.KafkaWordCount hadoop1:2181,hadoop2:2181,hadoop3:2181 flume sink1
在HDFS上的/user/root/checkpoint/下是輸出文件位置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章