Hyperledger Fabric推荐Kafa用于生产环境。Kafa是一个分布式、具备水平伸缩能力、崩溃容错能力 的日志系统。在Hyperledger Fabric区块链中能够有多个Kafka节点,使用zookeeper进行同步管理。 本文将介绍Kfaka的基本工做原理,以及在Hyperledger Fabric中使用Kafka和zookeeper实现共识的原理,并经过一个实例剖析Hyperledger Farbic中Kafka共识的达成过程。网络
若是但愿快速掌握Fabric区块链的链码及应用开发,建议访问汇智网的在线互动课程:框架
Kafka本质上是一个消息处理系统,它使用的是经典的发布-订阅模型。消息的消费者订阅特定的主题,以便收到新消息的通知,生产者则负责消息的发布。分布式
当主题的数据规模变得愈来愈大时,能够拆分为多个分区,Kafka保障在一个分区内的消息是按顺序排列的。函数
Kafka并不跟踪消费者读取了哪些消息,也不会自动删除已经读取的消息。Kafka会保存消息一段时间,例如一天,或者直到数据规模超过必定的阈值。消费者须要轮询新的消息,这使得他们能够根据本身的需求来定位消息,所以能够重放或从新处理事件。消费者处于不一样的消费者分组,对应一个或多个消费者进程。每一个分区被分贝给单一的消费者进程,所以一样的消息不会被屡次读取。性能
崩溃容错机制是经过在多个Kafka代理之间复制分区来实现的。所以若是一个代理因为软件或硬件故障挂掉,数据也不会丢失。固然接下来还须要一个领导-跟随机制,领导者持有分区,跟随者则进行分区的复制。当领导者挂掉后,会有某个跟随者转变为新的领导者。区块链
若是一个消费者订阅了某个主体,那么它怎么知道从哪一个分区领导者来读取订阅的消息?代理
答案在于zookeeper服务。日志
zookeeper是一个分布式key-value存储库,一般用于存储元数据及集群机制的实现。zookeeper容许服务(Kafka代理)的客户端订阅变化并得到实时通知。这就是代理如何肯定应当使用哪一个分区领导者的缘由。zookeeper有超强的故障容错能力,所以Kafka的运行严重依赖于它。blog
在zookeeper中存储的元数据包括:排序
要理解在超级帐本Hyperledger Fabric中的Kafka是如何工做的,首先须要理解几个重要的术语:
注意,虽然在Hyperledger Fabric中Kafka被称为共识(Consensus),可是其核心是交易排序服务以及额外的崩溃容错能力。
在Hyperledger Fabric中的Kafka实际运行逻辑以下:
考虑下图,假设排序节点OSN0和OSN2时链接到广播客户端,OSN1链接到分发客户端。
Kakfa的高性能对于Hyperledger Fabric有很大的帮助,多个排序节点经过Kafka实现同步,而Kafka自己并非排序节点,它只是将排序节点经过流链接起来。虽然Kafka支持崩溃容错,它并不能提供对网络中恶意攻击的保护。须要一种拜占庭容错方案(BFT)才能够对抗恶意的攻击,可是目前Hyperledger Farbic框架中还有待实现这一机制。
总而言之,在Hyperledger Farbic中,Kafka共识模块是能够用于生产环境的,它能够支持崩溃容错, 但没法对抗恶意攻击。