Kafka學習之:Centos 下Kafka叢集的安裝

來源:互聯網
上載者:User

標籤:centos   kafka   

kafka是LinkedIn開發並開源的一個分布式MQ系統,現在是Apache的一個孵化項目。在它的首頁描述kafka為一個高輸送量的分布式(能將訊息分散到不同的節點上)MQ。在這片博文中,作者簡單提到了開發kafka而不選擇已有MQ系統的原因。兩個原因:效能和擴充性。Kafka僅僅由7000行Scala編寫,據瞭解,Kafka每秒可以生產約25萬訊息(50 MB),每秒處理55萬訊息(110 MB)。

安裝準備
版本

Kafka版本:kafka_2.10-0.8.2.0

Zookeeper版本:3.4.6

Zookeeper 叢集:hadoop104,hadoop107,hadoop108

Zookeeper叢集的搭建參見:在CentOS上安裝ZooKeeper叢集

實體環境

安裝兩台物理機:

192.168.40.104  hadoop104(運行3個Broker)

192.148.40.105  hadoop105(運行2個Broker)

該叢集的建立主要分為三步,單節點單Broker,單節點多Broker,多節點多Broker


單節點單Broker

本節以hadoop104上建立一個Broker為例

下載kafka

下載路徑:http://kafka.apache.org/downloads.html

#tar -xvf kafka_2.10-0.8.2.0.tgz# cd kafka_2.10-0.8.2.0
配置

修改config/server.properties

     broker.id=1       port=9092     host.name=hadoop104       socket.send.buffer.bytes=1048576       socket.receive.buffer.bytes=1048576       socket.request.max.bytes=104857600       log.dir=./kafka1-logs     num.partitions=10     zookeeper.connect=hadoop107:2181,hadoop104:2181,hadoop108:2181  


啟動Kafka服務

#bin/kafka-server-start.sh config/server.properties



建立Topic

#bin/kafka-topics.sh --create --zookeeper hadoop107:2181,hadoop104:2181,hadoop108:2181 --replication-factor 1 --partitions 1 --topic test

查看Topic

#bin/kafka-topics.sh --list --zookeeper hadoop107:2181,hadoop104:2181,hadoop108:2181

輸出:



producer發送訊息

#bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 



consumer接收訊息

#bin/kafka-console-consumer.sh --zookeeper hadoop107:2181,hadoop104:2181,hadoop108:2181 --topic test --from-beginning



如果要最新的資料,可以不帶--from-beginning參數即可。

# /bin/kafka-console-consumer.sh --zookeeper  hadoop107:2181,hadoop104:2181,hadoop108:2181  --topic test


單節點多個Broker


配置

將上個章節中的檔案夾再複製兩份分別為kafka_2,kafka_3

#cp -r kafka_2.10-0.8.2.0 kafka_2#cp -r kafka_2.10-0.8.2.0 kafka_3

分別修改kafka_2/config/server.properties以及kafka_3/config/server.properties 檔案中的broker.id,以及port屬性,確保唯一性

kafka_2/config/server.propertiesbroker.id=2port=9093kafka_3/config/server.propertiesbroker.id=3port=9094

啟動啟動另外兩個Broker
#cd kafka_2# bin/kafka-server-start.sh config/server.properties &#cd ../kafka_3# bin/kafka-server-start.sh config/server.properties &

建立一個replication factor為3的topic
#bin/kafka-topics.sh --create --zookeeper hadoop107:2181,hadoop104:2181,hadoop108:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
查看Topic的狀態
bin/kafka-topics.sh --describe --zookeeper  hadoop107:2181,hadoop104:2181,hadoop108:2181  --topic my-replicated-topic

從上面的內容可以看出,該topic包含1個part,replicationfactor為3,且Node3 是leador解釋如下:
  • "leader" is the node responsible for all reads and writes for the given partition. Each node will be the leader for a randomly selected portion of the partitions.
  • "replicas" is the list of nodes that replicate the log for this partition regardless of whether they are the leader or even if they are currently alive.
  • "isr" is the set of "in-sync" replicas. This is the subset of the replicas list that is currently alive and caught-up to the leader. 

再來看一下之前建立的test topic, 從可以看出沒有進行replication

多個節點的多個Broker
在hadoop105上分別把下載的檔案解壓縮到kafka_4,kafka_5兩個檔案夾中,再將hadoop104上的server.properties設定檔拷貝到這連個檔案夾中
#scp -r config/ [email protected]:/root/hadoop/kafka_4/#scp -r config/ [email protected]:/root/hadoop/kafka_5/

配置並分別修改內容如下:
    kafka_4        brokerid=4        port=9095        host.name=hadoop105    kafka_5        brokerid=5        port=9096        host.name=hadoop105

啟動服務
#cd kafka_4# bin/kafka-server-start.sh config/server.properties &#cd ../kafka_5# bin/kafka-server-start.sh config/server.properties &


到目前為止,兩台物理機上的5個Broker已經啟動完畢



總結

在kafka的核心思路中,不需要在記憶體裡快取資料,因為作業系統的檔案快取已經足夠完善和強大,只要不做隨機寫,順序讀寫的效能是非常高效的。kafka的資料只會順序append,資料的刪除策略是累積到一定程度或者超過一定時間再刪除。Kafka另一個獨特的地方是將消費者資訊儲存在用戶端而不是MQ伺服器,這樣伺服器就不用記錄訊息的投遞過程,每個用戶端都自己知道自己下一次應該從什麼地方什麼位置讀取訊息,訊息的投遞過程也是採用用戶端主動pull的模型,這樣大大減輕了伺服器的負擔。Kafka還強調減少資料的序列化和拷貝開銷,它會將一些訊息組織成Message Set做批量儲存和發送,並且用戶端在pull資料的時候,盡量以zero-copy的方式傳輸,利用sendfile(對應java裡的FileChannel.transferTo/transferFrom)這樣的進階IO函數來減少拷貝開銷。可見,kafka是一個精心設計,特定於某些應用的MQ系統,這種偏向特定領域的MQ系統我估計會越來越多,垂直化的產品策略值的考慮。

只要磁碟沒有限制並且不出現損失,kafka可以儲存相當長時間的訊息(一周)。

Kafka學習之:Centos 下Kafka叢集的安裝

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.