比特幣挖礦——建立Kafka&ZooKeeper集群

1. 介紹

采用ZooKeeper+Kafka的方式建立集群玫恳,主要支持了消息傳遞和負(fù)載均衡,常見的一些文檔优俘,有的是概念較多京办,沒有實(shí)際操作;有的只有命令帆焕,不知其原理惭婿。這里就結(jié)合集群礦池來說說它的具體應(yīng)用場(chǎng)景,原理叶雹,以及具體實(shí)現(xiàn)财饥。

圖片.png

2. 舉例

先舉個(gè)例子,比如一個(gè)理發(fā)店:
一開始只有一個(gè)理發(fā)師折晦,洗剪吹都由他一個(gè)人負(fù)責(zé)佑力,那么只能一個(gè)客人做完全套(同一臺(tái)機(jī)器上操作各個(gè)步驟),再給下一個(gè)客人服務(wù)筋遭。
之后, 又來了幾個(gè)理發(fā)師,每個(gè)人負(fù)責(zé)接待一個(gè)客人(多臺(tái)服務(wù)器,每臺(tái)負(fù)責(zé)單個(gè)流程)漓滔。
再后來理發(fā)店又?jǐn)U大编饺,人多了(多臺(tái)不同用途的機(jī)器),老板發(fā)現(xiàn)如果把工作細(xì)分為:洗(A)剪(B)吹(C)三部分响驴,這三部分的工作量和難度都不同透且,可以安排專人專職,以節(jié)約人力成本豁鲤。三個(gè)模塊工作量不同秽誊,需要的人數(shù)也不同,如上圖所示琳骡,洗2人(2臺(tái)機(jī)器)锅论,剪3人(3臺(tái)機(jī)器),吹2人(2臺(tái)機(jī)器)楣号。Data為庫(kù)房(數(shù)據(jù)服務(wù)器)最易,每個(gè)人都可能去庫(kù)房存取工具。
顯然炫狱,A與B并不是一一對(duì)應(yīng)的關(guān)系藻懒。洗發(fā)之后,應(yīng)該分配剪發(fā)員執(zhí)行下一步驟视译。讓洗發(fā)員找每個(gè)剪發(fā)員查詢狀態(tài)顯然不是明智的作法嬉荆,而且,此時(shí)可能每個(gè)剪發(fā)員都不空閑酷含,A還有接下來的工作鄙早,也不能一接等在那兒。
于是就引入了另一個(gè)角色:接待員broker第美,當(dāng)某個(gè)A的工作做完全后蝶锋,則向broker的topic發(fā)一個(gè)消息,告訴它本層已完成什往,需要下一層處理扳缕,此時(shí)A是發(fā)送者producer,中介是broker(它也位于一臺(tái)機(jī)器上别威,這里沒用方框畫出來)躯舔,如果某個(gè)B空閑時(shí),也會(huì)連接到topic省古,等待下一個(gè)工作(如上圖所示)粥庄,此時(shí)B是接受者customer。B和C的通訊也是一樣豺妓,不過它們間通訊時(shí)B是producer惜互,C是customer布讹。
Broker是Kafka的一個(gè)實(shí)例,broker按功能不同又可建立多個(gè)topic训堆,topic里又可包含多個(gè)partition描验,每個(gè)partition都可保證先入先出,但partition之間不保證順序坑鱼。多個(gè)broker又可以做成Kafka群組膘流。綜上,Kafka是傳送消息的工具鲁沥,或者說是一套機(jī)制呼股,它實(shí)現(xiàn)了消息創(chuàng)建,存取等工作画恰。

圖片.png

在producer彭谁,customer,broker的背后又有著ZooKeeper的支持阐枣,它就好像理發(fā)店的排班員马靠,在這里主要負(fù)責(zé)負(fù)載均衡,將工作平均分配給customer蔼两,避免產(chǎn)生閑的閑死忙的忙死這種問題甩鳄。ZooKeeper也可以有多個(gè),即使某一個(gè)死掉额划,整個(gè)系統(tǒng)仍可正常運(yùn)轉(zhuǎn)妙啃。
從此處可見Kafka和Zookeeper上跑的不是執(zhí)行具體工作的程序(洗剪吹),它們的角色是提供通訊和負(fù)載均衡的協(xié)調(diào)者俊戳。具體洗剪吹運(yùn)行在哪個(gè)服務(wù)器上是另外的工作.

3. 配置過程

1) 配置ZooKeeper

在一臺(tái)或幾臺(tái)機(jī)器上配置和運(yùn)行ZooKeeper服務(wù)揖赴。

2) 配置Kafka

配置Kafka的 broker
創(chuàng)建topic及partition。

3) 修改程序

在程序中分別加入對(duì)producer和consumer的調(diào)用抑胎,以傳遞信息燥滑。

4) 說明

通過以上步驟,程序就可以在不同的機(jī)器通過簡(jiǎn)單地調(diào)用函數(shù)傳遞消息了阿逃。上述的ZooKeeper铭拧,Kafka,程序可以運(yùn)行在同一臺(tái)機(jī)器上恃锉,可以分別在運(yùn)行在不同機(jī)器上搀菩。

4. ZooKeeper

1) 介紹

ZooKeeper是一個(gè)快速、高可靠破托、容錯(cuò)肪跋、分布式的協(xié)調(diào)服務(wù)。

2) 配置

$ cp conf/zoo_sample.cfg conf/zoo.cfg
$ vi conf/zoo.cfg #修改配置文件

配置文件中server*是zookeeper服務(wù)器之間交互用的土砂,它使得一臺(tái)服務(wù)器死機(jī)時(shí)州既,另外一臺(tái)谜洽,能快速轉(zhuǎn)換為主zookeeper服務(wù)器
dataDir是數(shù)據(jù)目錄,clientPort為ZooKepper端口號(hào)易桃,一般不用改

$ ./startserver.sh start # 啟動(dòng)zooKeeper服務(wù)

3) 調(diào)試工具

$ bin/zkCli.sh -server 127.0.0.1:2181 #client端連上看一下
$ jps #查看進(jìn)程, 其中QuorumPeerMain是zooKeeper的主進(jìn)程
$ netstat -nap|grep 2181 # 查看配置文件中設(shè)置的端口是否打開

正常顯示為:

tcp  0   0   0.0.0.0:2181   0.0.0.0:*   LISTEN   10737/java

5. Kafka

1) 介紹

Kafka是一個(gè)分布式的流數(shù)據(jù)處理平臺(tái)褥琐。

2) 配置文件

$ vi config/server.properties
這是默認(rèn)的配置文件,以下幾項(xiàng)比較重要
broker.id=1 # broker的標(biāo)識(shí)晤郑,具有唯一性
port=9092 # kafka服務(wù)的端口號(hào)
log.dirs=/tmp/kafka-logs # 存儲(chǔ)log的目錄,交互的信息就存在該目錄下
zookeeper.connect=127.0.0.1:2181 # zookeeper服務(wù)器的IP和端口,多個(gè)用逗號(hào)分開
host.name=127.0.0.1 # 運(yùn)行本程序機(jī)器的IP地址贸宏,在btcpool的cfg中指定
delete.topic.enable=true #建議加這句造寝,否則刪topic時(shí)候特別麻煩
message.max.bytes=20000000 # 支持大數(shù)據(jù)msg,否則傳輸時(shí)將丟棄大數(shù)據(jù)塊
replica.fetch.max.bytes=30000000 # 同上   

3) 啟動(dòng)服務(wù)

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

4) 創(chuàng)建供btcpool使用的topic

需要先啟后臺(tái)服務(wù)吭练,再創(chuàng)建topic诫龙,我這里使用了一個(gè)本機(jī)的zookeeper,如果有多個(gè)鲫咽,請(qǐng)使用逗號(hào)分隔签赃。

$ ./bin/kafka-topics.sh --create --topic test --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 1

5) 相關(guān)工具

i. 查看topic

$ ./bin/kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 #查看topic

ii. 查看kafka服務(wù)

$ netstat -nap|grep 9092

正常運(yùn)行時(shí)返回

tcp  0   0 127.0.0.1:9092   0.0.0.0:*   LISTEN   24961/java

6) 刪除topic

先刪除kafka存儲(chǔ)目錄(server.properties文件log.dirs配置,默認(rèn)為"/tmp/kafka-logs")相關(guān)topic目錄分尸。注意partition的數(shù)據(jù)都存在這個(gè)目錄中锦聊。

./bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --topic test -delete

如果在server.properties中未指定delete.topic.enable=true,則只會(huì)做一個(gè)刪除標(biāo)記箩绍,不會(huì)真正刪除孔庭,刪除需要在zookeeper服務(wù)器上,通過zkCli.sh連進(jìn)去刪除材蛛。

7) 常出現(xiàn)的錯(cuò)誤

i. kafka-server-start.sh報(bào)錯(cuò)找不到主機(jī)圆到,然后直接退出
解決方法,在配置文件中設(shè)置主機(jī)
host.name=主機(jī)名
主機(jī)名通過命令hostname查看
ii. kafka-server-start.sh雖不退出卑吭,但不停報(bào)錯(cuò)java.lang.NoClassDefFoundError: Could not initialize class kafka.network.RequestChannel$
這也是主機(jī)名相關(guān)的問題芽淡,在/etc/hosts的最后填加一句
127.0.0.1 主機(jī)名
主機(jī)名通過命令hostname查看

8) 測(cè)試kafka

正常情況下,producer上發(fā)的豆赏,consumer都應(yīng)該能收到
i. 創(chuàng)建

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

ii. 接收

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

iii. 發(fā)送

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

如果topic沒建立挣菲,producer會(huì)自動(dòng)建立top,但參數(shù)可能與你想要的不同.

6. C程序調(diào)用kafka發(fā)消息

一般使用librdkafka庫(kù)河绽,下載庫(kù)源碼編譯己单,其中example目錄中的程序也可以用于測(cè)試。

7. 參考

1) Apache Kafka 分布式消息隊(duì)列中間件安裝與配置

http://blog.csdn.net/wangjia184/article/details/37921183

2) Kafka&Zookeeper原理與應(yīng)用場(chǎng)景介紹

https://wenku.baidu.com/view/a47389116ad97f192279168884868762caaebbd4.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耙饰,一起剝皮案震驚了整個(gè)濱河市纹笼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苟跪,老刑警劉巖廷痘,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔓涧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡笋额,警方通過查閱死者的電腦和手機(jī)元暴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兄猩,“玉大人茉盏,你說我怎么就攤上這事∈嘣” “怎么了鸠姨?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)淹真。 經(jīng)常有香客問我讶迁,道長(zhǎng),這世上最難降的妖魔是什么核蘸? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任巍糯,我火速辦了婚禮,結(jié)果婚禮上客扎,老公的妹妹穿的比我還像新娘祟峦。我一直安慰自己,他們只是感情好虐唠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布搀愧。 她就那樣靜靜地躺著,像睡著了一般疆偿。 火紅的嫁衣襯著肌膚如雪咱筛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天杆故,我揣著相機(jī)與錄音迅箩,去河邊找鬼。 笑死处铛,一個(gè)胖子當(dāng)著我的面吹牛饲趋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撤蟆,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼奕塑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了家肯?” 一聲冷哼從身側(cè)響起龄砰,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后换棚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體式镐,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年固蚤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娘汞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夕玩,死狀恐怖你弦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情风秤,我是刑警寧澤鳖目,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站缤弦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏彻磁。R本人自食惡果不足惜碍沐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衷蜓。 院中可真熱鬧累提,春花似錦、人聲如沸磁浇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)置吓。三九已至无虚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衍锚,已是汗流浹背友题。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戴质,地道東北人度宦。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像告匠,于是被迫代替她去往敵國(guó)和親戈抄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 姓名:周小蓬 16019110037 轉(zhuǎn)載自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw閱讀 34,712評(píng)論 13 425
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理后专,服務(wù)發(fā)現(xiàn)划鸽,斷路器,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • kafka的定義:是一個(gè)分布式消息系統(tǒng)行贪,由LinkedIn使用Scala編寫漾稀,用作LinkedIn的活動(dòng)流(Act...
    時(shí)待吾閱讀 5,309評(píng)論 1 15
  • 本文轉(zhuǎn)載自http://dataunion.org/?p=9307 背景介紹Kafka簡(jiǎn)介Kafka是一種分布式的...
    Bottle丶Fish閱讀 5,461評(píng)論 0 34
  • 背景介紹 Kafka簡(jiǎn)介 Kafka是一種分布式的模闲,基于發(fā)布/訂閱的消息系統(tǒng)。主要設(shè)計(jì)目標(biāo)如下: 以時(shí)間復(fù)雜度為O...
    高廣超閱讀 12,826評(píng)論 8 167