天天看點

Linux系列之Kafka單機搭建

文章目錄

  • ​​3、安裝JDK​​

##前言

###Kafka簡介

Kafka是由LinkedIn開發的一個分布式的消息系統,使用Scala編寫,它以可水準擴充和高吞吐率而被廣泛使用。目前越來越多的開源分布式處理系統如Cloudera、Apache Storm、Spark都支援與Kafka內建。

###Kafka優點

Kafka好處:轉自

​​InfoQ:Kafka剖析​​

  • 解耦

    在項目啟動之初來預測将來項目會碰到什麼需求,是極其困難的。消息系統在處理過程中間插入了一個隐含的、基于資料的接口層,兩邊的處理過程都要實作這一接口。這允許你獨立的擴充或修改兩邊的處理過程,隻要確定它們遵守同樣的接口限制。

  • 備援

    有些情況下,處理資料的過程會失敗。除非資料被持久化,否則将造成丢失。消息隊列把資料進行持久化直到它們已經被完全處理,通過這一方式規避了資料丢失風險。許多消息隊列所采用的"插入-擷取-删除"範式中,在把一個消息從隊列中删除之前,需要你的處理系統明确的指出該消息已經被處理完畢,進而確定你的資料被安全的儲存直到你使用完畢。

  • 擴充性

    因為消息隊列解耦了你的處理過程,是以增大消息入隊和處理的頻率是很容易的,隻要另外增加處理過程即可。不需要改變代碼、不需要調節參數。擴充就像調大電力按鈕一樣簡單。

  • 靈活性 & 峰值處理能力

    在通路量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量并不常見;如果為以能處理這類峰值通路為标準來投入資源随時待命無疑是巨大的浪費。使用消息隊列能夠使關鍵元件頂住突發的通路壓力,而不會因為突發的超負荷的請求而完全崩潰。

  • 可恢複性

    系統的一部分元件失效時,不會影響到整個系統。消息隊列降低了程序間的耦合度,是以即使一個處理消息的程序挂掉,加入隊列中的消息仍然可以在系統恢複後被處理。

  • 順序保證

    在大多使用場景下,資料處理的順序都很重要。大部分消息隊列本來就是排序的,并且能保證資料會按照特定的順序來處理。Kafka保證一個Partition内的消息的有序性。

  • 緩沖

    在任何重要的系統中,都會有需要不同的處理時間的元素。例如,加載一張圖檔比應用過濾器花費更少的時間。消息隊列通過一個緩沖層來幫助任務最高效率的執行———寫入隊列的處理會盡可能的快速。該緩沖有助于控制和優化資料流經過系統的速度。

  • 異步通信

    很多時候,使用者不想也不需要立即處理消息。消息隊列提供了異步處理機制,允許使用者把一個消息放入隊列,但并不立即處理它。想向隊列中放入多少消息就放多少,然後在需要的時候再去處理它們。

##安裝教程

###1、關閉SELINUX

vi /etc/selinux/config      

對配置檔案進行修改,然後按ESC鍵,:wq儲存退出

#SELINUX=enforcing 

#SELINUXTYPE=targeted

SELINUX=disabled #增加

:wq! #儲存退出      

###2、配置防火牆

vi /etc/sysconfig/iptables      

可以看到配置檔案,然後按I鍵,insert一行

-A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT      

然後按ESC鍵,:wq儲存退出

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

:wq! #儲存退出      

3、安裝JDK

如果有安裝yum的話,一般可以使用yum安裝,下面給出網上一篇很不錯的jdk安裝教程,建議Linux安裝的可以去linux公社找找教程

​​​CentOS6安裝JDK​​

###4、下載下傳安裝Kafka

cd進入相應檔案夾,一般安裝到/usr/local/src

cd /usr/local/src      

wget下載下傳檔案

wget http://archive.apache.org/dist/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz      

解壓

tar -xzvf kafka_2.11-0.8.2.1.tgz      

移動到安裝目錄

mv kafka_2.11-0.8.2.1 /usr/local/kafka      

###5、配置Kafka

建立Kafka日志檔案存放檔案夾

mkdir /usr/local/kafka/logs/kafka      

cd配置檔案目錄

cd /usr/local/kafka/config      

VI編輯

vi server.properties      

修改配置

broker.id=0

port=9092 #端口号

host.name=127.0.0.1 #伺服器IP位址,修改為自己的伺服器IP

log.dirs=/usr/local/kafka/logs/kafka #日志存放路徑,上面建立的目錄

zookeeper.connect=localhost:2181 #zookeeper位址和端口,單機配置部署,localhost:2181

:wq! #儲存退出      

###6、Zookeeper配置

建立一個目錄安裝

mkdir /usr/local/kafka/zookeeper      

建立一個Zookeeper日志存放目錄

mkdir /usr/local/kafka/logs/zookeeper      

配置檔案

cd /usr/local/kafka/config      
vi zookeeper.properties      
dataDir=/usr/local/kafka/zookeeper #zookeeper資料目錄

dataLogDir=/usr/local/kafka/log/zookeeper #zookeeper日志目錄

clientPort=2181

maxClientCnxns=100

tickTime=2000

initLimit=10

syncLimit=5

:wq! #儲存退出      

###7、腳本編寫

編寫kafka的start腳本

cd /usr/local/kafka      

使用vi建立腳本

vi kafkastart.sh      

加入腳本代碼,&符号表示在背景執行,然後:wq儲存退出

#!/bin/sh

#啟動zookeeper

/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties &

sleep 3 #等3秒後執行

#啟動kafka

/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &      

編寫kafka的stop腳本

vi kafkastop.sh      

腳本代碼如,同樣是:wq儲存退出

#!/bin/sh

#關閉zookeeper

/usr/local/kafka/bin/zookeeper-server-stop.sh /usr/local/kafka/config/zookeeper.properties &

sleep 3 #等3秒後執行

#關閉kafka

/usr/local/kafka/bin/kafka-server-stop.sh /usr/local/kafka/config/server.properties &      

添加腳本執行權限

chmod +x kafkastart.sh

chmod +x kafkastop.sh      

###8、配置腳本開機自行啟動

vi /etc/rc.d/rc.local      

設定開機時腳本在背景執行,使用&符号

将如下代碼添加到rc.local裡,同樣使用VI編輯器

sh /usr/local/kafka/kafkastart.sh &      

:wq儲存退出

sh /usr/local/kafka/kafkastart.sh #啟動kafka      
usr/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

/usr/local/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181 test

/usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test --from-beginning