ZooKeeper 2个集群同步,目前zk没有提供这种工具去做这样的事情,你可能需要自己编写脚本进行同步了。
换种思路,如果你仅仅需要同步数据,不如放到1个集群中。
例如:A\B在A机房,C\D在B机房,当AB机房之间的网络中断,或者机房直接全宕。
A、B、C、D四个节点,A为leader,BCD为follower
2个机房,AB和BC之间的机房网络断开时
当C、D都与A断开时,A连接不到其他服务节点,认为其他节点(除D)都宕机了,此时A仍然认为自己是leader,继续提供服;
而C、D是可以连通的,CD两个节点过半,可以重新选主,假如C选为leader,则C读写服务都可以正常提供;
这样就产生了2个集群,只是之后的数据开始不同步了,如果故障恢复,可手动重置恢复。
This ZooKeeper instance is not currently serving requests
当集群里的节点只剩下一台,或者不足半数时,就会出现这个错误提示。
这个量吞吐量已经到瓶颈吗?broker恢复之后,分区leader都切走了,理论上只有同步的流量了,如果你觉得还是达到了io上限,可以考虑kafka限流
感谢专家回复,请问下这个问题怎么解决:
1、客户端如何才能正常启动
2、kafka服务端这里可以做哪些操作来恢复客户端的启动
这个错误比较明显,争抢了导致并发事务ConcurrentTransactions
,代码问题占大头:
1、假死的进程一直占用并未释放(或者其他生产者抢占了),所以你换了个集群可用了。
2、代码不健壮,在特定情况下,导致数据产生了争抢提交。
Producer attempted to update a transaction while another concurrent operation on the same transaction was ongoing
生产者试图更新一个事务,而同一事务上的另一个并发操作正在进行中