基于kafka的Orderer宕机问题解析(Fabric1.1和Fabric1.4都有问题)

Orderer稳定性问题解析(Fabric1.1和Fabric1.4都有问题):

出现orderer的偏移量与Kafka的偏移量场景复现步骤及原因:

重新搭建链环境 kafka清理时间为10分钟

1. 创建mychannel通道 加入mychannel,过10分钟后,kafka清理干净,kafka的日志文件变成以偏移量为名称的文件,偏移量变为2,偏移量之前的数据清干净。

基于kafka的Orderer宕机问题解析(Fabric1.1和Fabric1.4都有问题)_第1张图片

基于kafka的Orderer宕机问题解析(Fabric1.1和Fabric1.4都有问题)_第2张图片

2. 重启orderer,kafka的日志会有数据增加,orderer所要的偏移量时2,此时orderer不会有问题,因为此时kafka偏移量是2,在等10分钟,kafka清理干净,kafka的日志文件变成以偏移量为名称的文件,偏移量变为4,偏移量之前的数据清干净

基于kafka的Orderer宕机问题解析(Fabric1.1和Fabric1.4都有问题)_第3张图片

3. 再次重启orderer,此时orderer的要的偏移量与kafka偏移量不一致,orderer的偏移量2的数据Kafka没有,所有orderer出问题了。

基于kafka的Orderer宕机问题解析(Fabric1.1和Fabric1.4都有问题)_第4张图片

为什么链运行了很长的时间,kafka数据都清了,链没问题呢?

测试:通过测试复现,两个orderer同时运行,kafka清理数据了,其中一个orderer重启后连不上kafka(也就是偏移量不一致问题),orderer宕机,另一个orderer没有重启,还是可以继续交易,但一重启这个也会连不上Kafka(也就是偏移量不一致问题),orderer宕机。

总结:虽然kafka数据清理了,只要orderer在整个运行过程中不重启,整个链就不会出问题,只要orderer一重启,orderer会与kafka进行重连,此时orderer所需要的数据在Kafka 里已被清理,导致orderer重连不上Kafka(也就是偏移量不一致问题),orderer宕机。

解决方案:

  1. 将kafka清理策略改为永久保存数据,经过长时间测试,未出现问题,推荐优。
  2. 手动修改kafka的偏移量,请参考我的其他博文。
  3. 修改orderer源码

你可能感兴趣的:(区块链)