hyperledger-fabric - 在使用 kafka 配置时提及订购者名称
问题描述
我在卡夫卡模式下使用排序器。现在在调用链代码时,我需要提供订购者名称。但是,如果我需要自己提供订购者名称,那么使用 kafka 选择订购者有什么用。
解决方案
我会注意到客户端可以在内存中初始化一个通道,该通道具有多个订购者的记录,并且 SDK 应该提供通过随机订购者发送交易的选项。虽然一个组织的客户端可能与一个 orderer 通信,但另一个组织可能更愿意将其客户端设置为使用不同的 orderer(或一组 orderer,也许这些都在组织自己的服务器上运行)。
kafka 的作用在于,它是一种通过帮助跟踪事务并允许对块进行正确排序来为具有高吞吐量和设置多个排序器的通道提供崩溃容错的方法。具体来说,当客户端将事务发送给 orderer 时,orderer 再中继到 kafka 集群维护的一个分区,然后 orderer 再从这个分区消费/读取,将事务打包成块(orderer 既是这个集合中的生产者,又是消费者向上)。kafka 通过维护所有订购者使用的交易流来保持所有订购者的同步。
完整的技术解决方案在https://docs.google.com/document/d/19JihmW-8blTzN99lAubOfseLUZqdrB6sBR0HsRgCANY/edit中进行了概述,下图来自第 11 页。
从 readthedocs 页面(https://hyperledger-fabric.readthedocs.io/en/release-1.2/kafka.html):
每个通道映射到 Kafka 中的一个单独的单分区主题。当 OSN 通过广播 RPC 接收事务时,它会检查以确保广播客户端有权在通道上写入,然后将这些事务中继(即生成)到 Kafka 中的适当分区。这个分区也被 OSN 使用,它将接收到的交易在本地分组到块中,将它们保存在本地分类帐中,并通过 Deliver RPC 将它们提供给接收客户端。有关底层细节,请参阅描述我们如何进行此设计的文档 — 图 8 是上述过程的示意图。
推荐阅读
- scala - 如何避免在Scala中绑定类型的重复
- azure - 如何从 Azure DevOps Pipeline 创建 Azure 服务队列?
- python - Django:处理后 JSON 请求
- key - Debian 安装:密钥交换和与接入点的关联失败
- javascript - TypeError:Text.isText 不是函数
- django - 姜戈。如何实现逻辑以在 django 模型中启动删除时间计数器或倒计时以自动删除对象?
- javascript - JavaScript - 使用三元语句中的扩展语法向对象添加属性
- mongodb - MongDB:查询以从嵌套文档中提取动态键、值对
- ruby-on-rails - 验证中错误格式的自定义消息
- typescript - 如何使用名为“keyof”类型的属性创建对象文字