您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)HyperLedger中Fabric如何使用kafka進(jìn)行區(qū)塊排序的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
Kafka is a distributed streaming platform,也就是我們通常將的“消息隊(duì)列”。
生產(chǎn)者可以通過kafka將消息傳遞給消費(fèi)者,kafka保證消息的順序以及不丟失:
需要注意的是,kafka雖然是一個(gè)分布式系統(tǒng),但它本身是被中心化管理,并且依賴zookeeper。
Fabric使用kafka的時(shí)候,為了安全,應(yīng)當(dāng)配置tls加密和認(rèn)證,特別是經(jīng)過公網(wǎng)的時(shí)候。為了演示不過于繁瑣,下面 沒有配置認(rèn)證和tls加密,可以仔細(xì)研讀Generate SSL key and certificate for each Kafka broker,進(jìn)行嘗試。
首先要有一個(gè)kafka集群,kafka本身是一個(gè)分布式系統(tǒng),部署配置略復(fù)雜。
這里的重點(diǎn)是Fabric,因此只部署了單節(jié)點(diǎn)的kafk,參考kafka quick start。
下載kafka,下載地址:
wget http://mirror.bit.edu.cn/apache/kafka/1.1.1/kafka_2.12-1.1.1.tgz tar -xvf kafka_2.12-1.1.1.tgz cd kafka_2.12-1.1.1/
安裝java,運(yùn)行kafka需要java:
$ yum install -y java-1.8.0-openjdk $ java -version openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
啟動(dòng)kafka自帶的zookeeper:
./bin/zookeeper-server-start.sh config/zookeeper.properties
根據(jù)HyperLedger Fabric對(duì)kafka的需求修改kafka的配置文件,可以到這里查看kafka的所有配置項(xiàng)):
# 默認(rèn)為false unclean.leader.election.enable = false # 根據(jù)kafka的節(jié)點(diǎn)數(shù)設(shè)置,需要小于備份數(shù) # 意思完成了“指定數(shù)量”的備份后,寫入才返回成功 min.insync.replicas = 1 # 數(shù)據(jù)備份數(shù) default.replication.factor = 1 # 需要大于創(chuàng)世塊中設(shè)置的 Orderer.AbsoluteMaxBytes # 注意不要超過 socket.request.max.bytes(100M) # 這里設(shè)置的是10M message.max.bytes = 10000120 # 需要大于創(chuàng)世塊中設(shè)置的 Orderer.AbsoluteMaxBytes # 注意不要超過 socket.request.max.bytes(100M) # 這里設(shè)置的是10M replica.fetch.max.bytes = 10485760 # 當(dāng)前orderer不支持kafka log,需要關(guān)閉這個(gè)功能 # @2018-07-29 08:19:32 log.retention.ms = -1
將上面的配置添加到config/server.properties
中,然后啟動(dòng)kafka:
bin/kafka-server-start.sh config/server.properties
注意,你可能需要根據(jù)自己的實(shí)際情況配置advertised.listeners
,使用kafka的機(jī)器需要能夠通過 下面配置的hostname訪問對(duì)應(yīng)的節(jié)點(diǎn),默認(rèn)獲取當(dāng)前hostname,如果不配置hostname,可以修改為主機(jī)的對(duì)外IP。
#advertised.listeners=PLAINTEXT://your.host.name:9092
如果要進(jìn)行多節(jié)點(diǎn)部署,在另一臺(tái)機(jī)器上用同樣方式部署:
注意更改server.properties中的zk地址,所有節(jié)點(diǎn)要使用同一個(gè)zk 其它節(jié)點(diǎn)不需要再啟動(dòng)zookeeper
zookeeper也可以進(jìn)行多節(jié)點(diǎn)部署,這里就不展開了,參考zookeeper的資料。
部署啟動(dòng)后,測試一下kafka:
# 創(chuàng)建名為`test`的topic $ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test # 查看topic $ bin/kafka-topics.sh --list --zookeeper localhost:2181 test # 啟動(dòng)生產(chǎn)者,并輸入任意字符 $ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test >This is a message >This is another message # 啟動(dòng)消費(fèi)者,接收到生產(chǎn)者的輸入 $ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning This is a message This is another message
需要注意現(xiàn)在(@2018-07-29 08:20:48)Fabric不支持切換共識(shí)機(jī)制!一旦選定了共識(shí)機(jī)制后,無法修改,除非清空所有數(shù)據(jù),重新部署。
修改configtx.yaml
中Orderer
部分的內(nèi)容,將共識(shí)機(jī)制修改為kafka,并填入kafka節(jié)點(diǎn)的地址:
101 Orderer: &OrdererDefaults 102 OrdererType: kafka 103 Addresses: 104 - orderer0.member1.example.com:7050 105 BatchTimeout: 2s 106 BatchSize: 107 MaxMessageCount: 10 108 AbsoluteMaxBytes: 8 MB # 注意要小于kafka中設(shè)置的10M 109 PreferredMaxBytes: 512 KB 110 MaxChannels: 0 111 Kafka: 112 Brokers: 113 - 192.168.88.11:9092 # 可以填入多個(gè)kafka節(jié)點(diǎn)的地址
如果kafka配置了tls加密,還要修改修改每個(gè)orderer的配置文件orderer.yaml
中的Kakfa部分的內(nèi)容,并上傳證書。
重新生成創(chuàng)世塊,重新部署Fabric,即可。
./prepare.sh example ansible-playbook -i inventories/example.com/hosts -u root playbooks/manage_destroy.yml ansible-playbook -i inventories/example.com/hosts -u root deploy_nodes.yml ansible-playbook -i inventories/example.com/hosts -u root deploy_cli.yml ansible-playbook -i inventories/example.com/hosts -u root deploy_cli_local.yml
Fabric重新部署啟動(dòng)后,可以看到kafka中多了一個(gè)名為genesis
的topic,genesis是我們這里使用的創(chuàng)世區(qū)塊的channel的名稱:
$ bin/kafka-topics.sh --list --zookeeper localhost:2181 __consumer_offsets genesis test
創(chuàng)建了名為mychannel
的channel之后,kafka中多出了一個(gè)同名的topic:
$bin/kafka-topics.sh --list --zookeeper localhost:2181 __consumer_offsets genesis mychannel test
如果要重新部署,清空zk和kafka的數(shù)據(jù):
rm -rf /tmp/zookeeper/ rm -rf /tmp/kafka-logs/
感謝各位的閱讀!關(guān)于“HyperLedger中Fabric如何使用kafka進(jìn)行區(qū)塊排序”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。