溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HyperLedger中Fabric如何使用kafka進(jìn)行區(qū)塊排序

發(fā)布時(shí)間:2021-12-06 14:36:03 來源:億速云 閱讀:184 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章給大家分享的是有關(guān)HyperLedger中Fabric如何使用kafka進(jìn)行區(qū)塊排序的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

什么是kafka,為什么能用來做排序(共識(shí))?

Kafka is a distributed streaming platform,也就是我們通常將的“消息隊(duì)列”。

生產(chǎn)者可以通過kafka將消息傳遞給消費(fèi)者,kafka保證消息的順序以及不丟失:

HyperLedger中Fabric如何使用kafka進(jìn)行區(qū)塊排序

需要注意的是,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)行嘗試。

部署kafka

首先要有一個(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

生成創(chuàng)世區(qū)塊 & 重新部署Fabric

需要注意現(xiàn)在(@2018-07-29 08:20:48)Fabric不支持切換共識(shí)機(jī)制!一旦選定了共識(shí)機(jī)制后,無法修改,除非清空所有數(shù)據(jù),重新部署。

修改configtx.yamlOrderer部分的內(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

創(chuàng)建Channel & 觀察kafka中的topic

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

ZooKeeper和Kafka數(shù)據(jù)的清空

如果要重新部署,清空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ò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(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)容。

AI