我是新来的面料技术。我读了一些关于基于Kafka的订购服务及其优势的文章。一些文章认为基于kafka的多排序服务适合于容错。现在我只应用3个基于kafka的订购服务(order0、order1、order2)。然后我使用以下命令停止了2 order
docker stop orderer1.example.com
docker stop orderer2.example.com
现在restapi工作正常了。然后我停止Order0使用
docker stop orderer0.example.com
现在我的RESTAPI不工作了。它面临网络连接问题。然后我使用以下命令启动Order1、Order2
docker start orderer1.example.com
docker start orderer2.example.com
但是我的restapi不工作……….它面临着同样的网络连接问题。
最后我开始使用Order0
docker start orderer0.example.com
现在网络运行良好。
我的问题是
基于Kafka的订购服务的实际用途是什么。。??
如何实现基于kafka的订购服务来防止订购者宕机问题。。。??
fabric:1.1.0
composer:0.19.16
node:8.11.3
操作系统:ubuntu 16.04
2条答案
按热度按时间3duebb1j1#
根据Kafka订购服务
每个通道Map到Kafka中单独的单个分区主题
这意味着主题中的所有消息都完全按照发送顺序排列。
以及
至少,[经纪人的数量]应该设置为4(正如我们将在下面的步骤4中解释的那样,这是展示崩溃容错能力所需的最小节点数,即对于4个代理,您可以让1个代理关闭,所有通道将继续可写和可读,并且可以创建新的通道。)
上面假设kafka复制因子为3,并且要设置的是生产客户机
min.insync.replicas
理想情况下为2,以确保所有写入都复制到至少两个服务器。基于您的网络问题,这听起来像您实际上没有正确配置所有三个代理(需要查看您的整个docker设置以及dockerfile实际在做什么)。但是,假设您为这个“restapi”配置了所有三个代理,并且有一个带有3个副本的单分区kafka主题(默认复制是1,主题是用这个自动创建的)。因此,我建议您将其全部清除,然后启动三个代理,然后手动创建一个分区、三个副本的主题,然后启动hyperledger。
如果restapi是真正的问题,而不是kafka连接,那么我想您需要一个负载平衡器
ar7v8xwq2#
当我想设置几个订购者时,我遇到了和你一样的问题。为了解决这个问题,我有两个解决方案:
我更改了sdk,当前您的sdk尝试联系Order0如果失败则返回错误,有必要对此进行更改,以便请求在orderer列表上循环,如果无效则返回错误。
更简单:在订购者的上游设置负载平衡器。
回答你的问题。建立基于kafka的排序服务的优点是,所提出的块的数据分布在多个服务器上。这是一种容错机制,因为如果订购者崩溃并重新连接到kafka集群,它将能够重新同步。性能更好(这是理论上的,我没有测试这一点)