分布式消息队列Kafka集群安装
kafka是LinkedIn開(kāi)發(fā)并開(kāi)源的一個(gè)分布式MQ系統(tǒng),現(xiàn)在是Apache的一個(gè)孵化項(xiàng)目。在它的主頁(yè)描述kafka為一個(gè)高吞吐量的分布式(能將消息分散到不同的節(jié)點(diǎn)上)MQ。在這片博文中,作者簡(jiǎn)單提到了開(kāi)發(fā)kafka而不選擇已有MQ系統(tǒng)的原因。兩個(gè)原因:性能和擴(kuò)展性。Kafka僅僅由7000行Scala編寫,據(jù)了解,Kafka每秒可以生產(chǎn)約25萬(wàn)消息(50 MB),每秒處理55萬(wàn)消息(110 MB)。
Kafka版本:0.8.0
約定:安裝3臺(tái)虛擬機(jī)
官網(wǎng):http://kafka.apache.org/
官方文檔:http://kafka.apache.org/documentation.html#quickstart
下載解壓
# wget http://mirrors.hust.edu.cn/apache/kafka/0.8.0/kafka-0.8.0-src.tgz
# tar xzf kafka-0.8.0-src.tgz
# cd kafka-0.8.0-src
Kafka是用Scala寫的,SBT是Simple Build Tool的簡(jiǎn)稱,如果讀者使用過(guò)Maven,那么可以簡(jiǎn)單將SBT看做是Scala世界的Maven,雖然二者各有優(yōu)劣,但完成的工作基本是類似的。
## Building it ##
# ./sbt update
# ./sbt package
# ./sbt assembly-package-dependency
以上每一步完成就會(huì)提醒[Success]
例如:[success] Total time: 21 s, completed 2014-2-11 10:29:55
集群環(huán)境需要修改配置文件
# vim config/server.properties
brokerid:這個(gè)每個(gè)server(broker)必須唯一,寫數(shù)字
hostname:這個(gè)也是唯一的,寫服務(wù)器IP即可
############################# Server Basics ############################## The id of the broker. This must be set to a unique integer for each broker.
broker.id=3############################# Socket Server Settings ############################## The port the socket server listens on
port=9092# Hostname the broker will bind to and advertise to producers and consumers.
# If not set, the server will bind to all interfaces and advertise the value returned from
# from java.net.InetAddress.getCanonicalHostName().
#host.name=localhost
host.name=192.168.2.111
還有就是zookeeper.connect也要配置
zookeeper.connect=192.168.19.218:2181,192.168.19.217:2181,192.168.19.214:2181關(guān)于zookeeper的安裝可以參考此文:ZooKeeper集群環(huán)境安裝與配置
其他默認(rèn)配置即可。
啟動(dòng)Kafka服務(wù)
# /usr/kafka-0.8.0-src/bin/kafka-server-start.sh /usr/kafka-0.8.0-src/config/server.properties
創(chuàng)建Topic
# /usr/kafka-0.8.0-src/bin/kafka-create-topic.sh --zookeeper localhost:2181 --partition 1 --topic test
查看Topic
# /usr/kafka-0.8.0-src/bin/kafka-list-topic.sh --zookeeper localhost:2181
輸出:
topic: test???? partition: 0??? leader: 1?????? replicas: 1???? isr: 1
說(shuō)明:
partiton: partion id,由于此處只有一個(gè)partition,因此partition id 為0
leader:當(dāng)前負(fù)責(zé)讀寫的lead broker id
relicas:當(dāng)前partition的所有replication broker? list
isr:relicas的子集,只包含出于活動(dòng)狀態(tài)的broker
producer發(fā)送消息
# /usr/kafka-0.8.0-src/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message
consumer接收消息
# /usr/kafka-0.8.0-src/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
注意,如果上述命令不能發(fā)送接收消息說(shuō)明沒(méi)有配置host,可以直接用ip
producer發(fā)送消息
# /usr/kafka-0.8.0-src/bin/kafka-console-producer.sh --broker-list 192.168.19.218:9092 --topic test
consumer接收消息
# /usr/kafka-0.8.0-src/bin/kafka-console-consumer.sh --zookeeper 192.168.19.218:2181 --topic test --from-beginning
如果要最新的數(shù)據(jù),可以不帶--from-beginning參數(shù)即可。
# /usr/kafka-0.8.0-src/bin/kafka-console-consumer.sh --zookeeper 192.168.19.218:2181 --topic test
在kafka的核心思路中,不需要在內(nèi)存里緩存數(shù)據(jù),因?yàn)椴僮飨到y(tǒng)的文件緩存已經(jīng)足夠完善和強(qiáng)大,只要不做隨機(jī)寫,順序讀寫的性能是非常高效的。kafka的數(shù)據(jù)只會(huì)順序append,數(shù)據(jù)的刪除策略是累積到一定程度或者超過(guò)一定時(shí)間再刪除。Kafka另一個(gè)獨(dú)特的地方是將消費(fèi)者信息保存在客戶端而不是MQ服務(wù)器,這樣服務(wù)器就不用記錄消息的投遞過(guò)程,每個(gè)客戶端都自己知道自己下一次應(yīng)該從什么地方什么位置讀取消息,消息的投遞過(guò)程也是采用客戶端主動(dòng)pull的模型,這樣大大減輕了服務(wù)器的負(fù)擔(dān)。Kafka還強(qiáng)調(diào)減少數(shù)據(jù)的序列化和拷貝開(kāi)銷,它會(huì)將一些消息組織成Message Set做批量存儲(chǔ)和發(fā)送,并且客戶端在pull數(shù)據(jù)的時(shí)候,盡量以zero-copy的方式傳輸,利用sendfile(對(duì)應(yīng)java里的FileChannel.transferTo/transferFrom)這樣的高級(jí)IO函數(shù)來(lái)減少拷貝開(kāi)銷。可見(jiàn),kafka是一個(gè)精心設(shè)計(jì),特定于某些應(yīng)用的MQ系統(tǒng),這種偏向特定領(lǐng)域的MQ系統(tǒng)我估計(jì)會(huì)越來(lái)越多,垂直化的產(chǎn)品策略值的考慮。
只要磁盤沒(méi)有限制并且不出現(xiàn)損失,kafka可以存儲(chǔ)相當(dāng)長(zhǎng)時(shí)間的消息(一周)。
原文出自:本人另一個(gè)博客http://blog.csdn.net/unix21/
總結(jié)
以上是生活随笔為你收集整理的分布式消息队列Kafka集群安装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一同钱等于现在多少钱
- 下一篇: MyEclipse2014配置Tomca