Orderer稳定性问题解析(Fabric1.1和Fabric1.4都有问题):
出现orderer的偏移量与Kafka的偏移量场景复现步骤及原因:
重新搭建链环境 kafka清理时间为10分钟
1. 创建mychannel通道 加入mychannel,过10分钟后,kafka清理干净,kafka的日志文件变成以偏移量为名称的文件,偏移量变为2,偏移量之前的数据清干净。
2. 重启orderer,kafka的日志会有数据增加,orderer所要的偏移量时2,此时orderer不会有问题,因为此时kafka偏移量是2,在等10分钟,kafka清理干净,kafka的日志文件变成以偏移量为名称的文件,偏移量变为4,偏移量之前的数据清干净
3. 再次重启orderer,此时orderer的要的偏移量与kafka偏移量不一致,orderer的偏移量2的数据Kafka没有,所有orderer出问题了。
为什么链运行了很长的时间,kafka数据都清了,链没问题呢?
测试:通过测试复现,两个orderer同时运行,kafka清理数据了,其中一个orderer重启后连不上kafka(也就是偏移量不一致问题),orderer宕机,另一个orderer没有重启,还是可以继续交易,但一重启这个也会连不上Kafka(也就是偏移量不一致问题),orderer宕机。
总结:虽然kafka数据清理了,只要orderer在整个运行过程中不重启,整个链就不会出问题,只要orderer一重启,orderer会与kafka进行重连,此时orderer所需要的数据在Kafka 里已被清理,导致orderer重连不上Kafka(也就是偏移量不一致问题),orderer宕机。
解决方案:
- 将kafka清理策略改为永久保存数据,经过长时间测试,未出现问题,推荐优。
- 手动修改kafka的偏移量,请参考我的其他博文。
- 修改orderer源码