FabricKafka入門(mén)-創(chuàng)新互聯(lián)

Hyperledger Fabric推薦Kafa用于生產(chǎn)環(huán)境。Kafa是一個(gè)分布式、具有水平伸縮能力、崩潰容錯(cuò)能力的日志系統(tǒng)。在Hyperledger Fabric區(qū)塊鏈中可以有多個(gè)Kafka節(jié)點(diǎn),使用zookeeper進(jìn)行同步管理。本文將介紹Kfaka的基本工作原理,以及在HyperledgerFabric中使用Kafka和zookeeper實(shí)現(xiàn)共識(shí)的原理,并通過(guò)一個(gè)實(shí)例剖析Hyperledger Farbic中Kafka共識(shí)的達(dá)成過(guò)程。

目前成都創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、石峰網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

如果希望快速掌握Fabric區(qū)塊鏈的鏈碼及應(yīng)用開(kāi)發(fā),建議訪(fǎng)問(wèn)匯智網(wǎng)的在線(xiàn)互動(dòng)課程:

  • Fabric區(qū)塊鏈Java開(kāi)發(fā)詳解
  • Fabric區(qū)塊鏈NodeJs開(kāi)發(fā)詳解

一、Kafka工作原理

Kafka本質(zhì)上是一個(gè)消息處理系統(tǒng),它使用的是經(jīng)典的發(fā)布-訂閱模型。消息的消費(fèi)者訂閱特定的主題,以便收到新消息的通知,生產(chǎn)者則負(fù)責(zé)消息的發(fā)布。

Fabric Kafka入門(mén)

當(dāng)主題的數(shù)據(jù)規(guī)模變得越來(lái)越大時(shí),可以拆分為多個(gè)分區(qū),Kafka保障在一個(gè)分區(qū)內(nèi)的消息是按順序排列的。

Kafka并不跟蹤消費(fèi)者讀取了哪些消息,也不會(huì)自動(dòng)刪除已經(jīng)讀取的消息。Kafka會(huì)保存消息一段時(shí)間,例如一天,或者直到數(shù)據(jù)規(guī)模超過(guò)一定的閾值。消費(fèi)者需要輪詢(xún)新的消息,這是的他們可以根據(jù)自己的需求來(lái)定位消息,因此可以重放或重新處理事件。消費(fèi)者處于不同的消費(fèi)者分組,對(duì)應(yīng)一個(gè)或多個(gè)消費(fèi)者進(jìn)程。每個(gè)分區(qū)被分貝給單一的消費(fèi)者進(jìn)程,因此同樣的消息不會(huì)被多次讀取。

崩潰容錯(cuò)機(jī)制是通過(guò)在多個(gè)Kafka代理之間復(fù)制分區(qū)來(lái)實(shí)現(xiàn)的。因此如果一個(gè)代理由于軟件或硬件故障掛掉,數(shù)據(jù)也不會(huì)丟失。當(dāng)然接下來(lái)還需要一個(gè)領(lǐng)導(dǎo)-跟隨機(jī)制,領(lǐng)導(dǎo)者持有分區(qū),跟隨者則進(jìn)行分區(qū)的復(fù)制。當(dāng)領(lǐng)導(dǎo)者掛掉后,會(huì)有某個(gè)跟隨者轉(zhuǎn)變?yōu)樾碌念I(lǐng)導(dǎo)者。

如果一個(gè)消費(fèi)者訂閱了某個(gè)主體,那么它怎么知道從哪個(gè)分區(qū)領(lǐng)導(dǎo)者來(lái)讀取訂閱的消息?

答案在于zookeeper服務(wù)。

zookeeper是一個(gè)分布式key-value存儲(chǔ)庫(kù),通常用于存儲(chǔ)元數(shù)據(jù)及集群機(jī)制的實(shí)現(xiàn)。zookeeper允許服務(wù)(Kafka代理)的客戶(hù)端訂閱變化并獲得實(shí)時(shí)通知。這就是代理如何確定應(yīng)當(dāng)使用哪個(gè)分區(qū)領(lǐng)導(dǎo)者的原因。zookeeper有超強(qiáng)的故障容錯(cuò)能力,因此Kafka的運(yùn)行嚴(yán)重依賴(lài)于它。

在zookeeper中存儲(chǔ)的元數(shù)據(jù)包括:

  • 消費(fèi)者分組在每個(gè)分區(qū)的讀取偏移量
  • 訪(fǎng)問(wèn)控制清單,用于訪(fǎng)問(wèn)授權(quán)與限制
  • 生產(chǎn)者及消費(fèi)者配額,每秒最多消息數(shù)量
  • 分區(qū)領(lǐng)導(dǎo)者及健康信息

二、Hyperledger Fabric中的Kafka

要理解在超級(jí)賬本Hyperledger Fabric中的Kafka是如何工作的,首先需要理解幾個(gè)重要的術(shù)語(yǔ):

  • Chain - 指的是一組客戶(hù)端(通道/channel)可以訪(fǎng)問(wèn)的日志
  • Channel - 一個(gè)通道類(lèi)似于一個(gè)主題,授權(quán)的對(duì)等節(jié)點(diǎn)(peer)可以訂閱并且成為通道的成員。 只有通道的成員可以在通道上交易,一個(gè)通道中的交易在其他通道中看不到。
  • OSN - 即排序服務(wù)節(jié)點(diǎn)(Ordering Service Node),在Fabric中被稱(chēng)為排序節(jié)點(diǎn)。排序節(jié)點(diǎn)負(fù)責(zé):
    • 進(jìn)行客戶(hù)鑒權(quán)
    • 允許客戶(hù)端通過(guò)一個(gè)簡(jiǎn)單的接口寫(xiě)入或讀取通道
    • 執(zhí)行配置交易的過(guò)濾與驗(yàn)證,實(shí)現(xiàn)通道的重新配置或創(chuàng)建新的通道
  • RPC - 即遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call),是一種用于調(diào)用其他機(jī)器上的服務(wù)而無(wú)需了解 通信與實(shí)現(xiàn)細(xì)節(jié)的通信協(xié)議,目的是像調(diào)用本地函數(shù)一樣調(diào)用網(wǎng)絡(luò)中其他機(jī)器上的函數(shù)
  • 廣播PRC - 交易提交調(diào)用,由排序節(jié)點(diǎn)執(zhí)行
  • 分發(fā)RPC - 交易分發(fā)請(qǐng)求,當(dāng)交易由kafka代理處理后,分發(fā)給請(qǐng)求節(jié)點(diǎn)

注意,雖然在Hyperledger Fabric中Kafka被稱(chēng)為共識(shí)(Consensus),但是其核心是交易排序服務(wù)以及額外的崩潰容錯(cuò)能力。

在Hyperledger Fabric中的Kafka實(shí)際運(yùn)行邏輯如下:

  • 對(duì)于每一條鏈,都有一個(gè)對(duì)應(yīng)的分區(qū)
  • 每個(gè)鏈對(duì)應(yīng)一個(gè)單一的分區(qū)主題
  • 排序節(jié)點(diǎn)負(fù)責(zé)將來(lái)自特定鏈的交易(通過(guò)廣播RPC接收)中繼到對(duì)應(yīng)的分區(qū)
  • 排序節(jié)點(diǎn)可以讀取分區(qū)并獲得在所有排序節(jié)點(diǎn)間達(dá)成一致的排序交易列表
  • 一個(gè)鏈中的交易是定時(shí)分批處理的,也就是說(shuō)當(dāng)一個(gè)新的批次的第一個(gè)交易進(jìn)來(lái)時(shí),開(kāi)始計(jì)時(shí)
  • 當(dāng)交易達(dá)到大數(shù)量時(shí)或超時(shí)后進(jìn)行批次切分,生成新的區(qū)塊
  • 定時(shí)交易是另一個(gè)交易,由上面描述的定時(shí)器生成
  • 每個(gè)排序節(jié)點(diǎn)為每個(gè)鏈維護(hù)一個(gè)本地日志,生成的區(qū)塊保存在本地賬本中
  • 交易區(qū)塊通過(guò)分發(fā)RPC返回客戶(hù)端
  • 當(dāng)發(fā)生崩潰時(shí),可以利用不同的排序節(jié)點(diǎn)分發(fā)區(qū)塊,因?yàn)樗械呐判蚬?jié)點(diǎn)都維護(hù)有本地日志

Fabric Kafka入門(mén)

三、Hyperledger Fabric Kafka實(shí)例解析

考慮下圖,假設(shè)排序節(jié)點(diǎn)OSN0和OSN2時(shí)連接到廣播客戶(hù)端,OSN1連接到分發(fā)客戶(hù)端。

Fabric Kafka入門(mén)

  • OSN0已經(jīng)有了交易foo,中繼到kafka集群
  • 此時(shí)OSN2將交易baz廣播到集群中
  • 最后,交易bar由OSN0發(fā)送到集群中
  • 集群現(xiàn)在有三個(gè)交易,可以在圖中看到三個(gè)交易的在日志中的位置偏移量
  • 客戶(hù)端發(fā)送分發(fā)請(qǐng)求,在OSN1的本地日志中,上述三個(gè)交易在4#區(qū)塊里。
  • 因此OSN1將4#區(qū)塊返回客戶(hù)端,處理結(jié)束

Kakfa的高性能對(duì)于Hyperledger Fabric有很大的幫助,多個(gè)排序節(jié)點(diǎn)通過(guò)Kafka實(shí)現(xiàn)同步,而Kafka本身并不是排序節(jié)點(diǎn),它只是將排序節(jié)點(diǎn)通過(guò)流連接起來(lái)。雖然Kafka支持崩潰容錯(cuò),它并不能提供對(duì)網(wǎng)絡(luò)中惡意***的保護(hù)。需要一種拜占庭容錯(cuò)方案(BFT)才可以對(duì)抗惡意的***,但是目前在Farbic框架中還有待實(shí)現(xiàn)這一機(jī)制。

總而言之,在Hyperledger Farbic中,Kafka共識(shí)模塊是可以用于生產(chǎn)環(huán)境的,它可以支持崩潰容錯(cuò),但無(wú)法對(duì)抗惡意***。


原文:The ABCs of Kafka in Hyperledger Fabric

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

標(biāo)題名稱(chēng):FabricKafka入門(mén)-創(chuàng)新互聯(lián)
瀏覽路徑:http://muchs.cn/article8/dddgop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、軟件開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化手機(jī)網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷(xiāo)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司