00:00
好,接下来呢,我们来看一下leader partition的一个负载平衡,那这个呢,在生产环境当中啊,非常非常重要,那为什么它非常重要呢?啊举个例子啊,呃,因为我们这是整个集群啊,这边呢是这个生产者,这边是消费者,因为生产者和消费者操作的对象都是这个leader partan,那么如果你这里面出现一个leader partan不平衡,比如说这个节点,这个点节点,那这样吧,以这个为例,你看这是四台服务器,那么博克零和博一里面分布着大量的这个leader节点,那博克二博格三没有分布,那么必然导致这个零和一非常忙碌,二和三呢,哎,比较清闲。那这个是怎么造成的呢?给大家详细说一下啊,说正常情况下好吧,本身呢,会自动的将leader part均匀的分散在每一个服务器上,对吧,均匀分布这个之前咱们讲过啊,没问题的啊,来保证那个每台机器的吞吐量呢是均匀的,但是呢,如果某个博科宕机了。哎,假如说这个博二博三弹过机,那么就会导致这个leader part过于集中在其他几台节点上。
01:04
啊,因为他一旦挂了时候,那是不是退出isr啊,那即使他再恢复到isr的时候,那是不是其他节点已经把这个leader节点抢占过来了,哎,那他不会下线仍然是leader节点啊,那这里面只能承担着follow的一个角色啊,那他的压力呢,就没那么大,那导致呢,前两台节点压力非常非常大。那为了解决这种现象,考普法怎么做的呢?哎,它设置了这么一个机制,叫自动再平衡啊,叫auto to re balance enable,如果把这个参数制成处的话,它自动帮你进行一个负载均衡,哎,让每一个节点均匀的一个分布啊。那这个参数呢,默认就是数哈,好。那么它均匀分布,那什么情况下我要处罚这个均匀分布呢?是有一个节点哎不均匀我就立即的就触发吗?或者说这里面有一有没有一个阈值到达一个什么情况,哎,开始触发平衡啊,那这里面它是这个参数啊说呢,每一个博荷允许的不平衡leader的一个比例,如果每个博荷超过这个值,那控制器呢,就会触发再平衡,那这个阈值呢,就是10%,比如说博科与博科节点之间,哎,它们之间的不平衡比例超过了10%,那么就会触发再平衡啊,那一会儿呢,详细给大家说一下这个10%怎么计算哈。
02:19
那既然说它可以自动帮你进行一个处罚再平衡,那么时间是多少啊,你说多长时间,我检测一下它有没有超过10%啊,哎,那这里面检测的这个时间呢,间隔是300秒,哎,300秒呢,我就检测一次啊,有没有不平衡,不平衡我就触发让它平衡啊。那下面来详细说一下这个10%怎么算,或者说怎么来算这个不平衡的比例啊。啊,我们这里面拿一个主题为例,我们现在呢,是艾特硅谷一这个主题,它对应的有四个分区,四个副本,啊这样一个情况好。那下面来看一个什么事呢?你会发现啊,按照我们正常的一个选举规则,首先在isr里面存活,接下来在副本AR当中排在前面的是不是优先成为leader,但是你看这里面出现什么情况。
03:09
说明明这个第一个分区它应该是三啊,三成为这个leader,但是结果是零,好,那下一个节点呢,明明应该是一,诶它这个是一啊,这没毛病啊,这没毛病,那下一个呢,下一个明明应该是零,成为新的一个leader,但是结果呢,你看它是二,好,那再来一个这个AR呢,是二,我明明这个应该是二,但是现在变成三,就说明这里面发生过一个节点的宕机,然后再重启啊,最终导致它的呃,顺序呢,跟这个不太一样。那么导致这个不一样,那怎么算这个不平衡比例呢?啊,它是这样算啊,比如说我们针对这个博克零为例,比如说以这个四台节点啊,博格0123啊,博格0123啊这么四个节点,那么以拿这台机器为为例。那波和零好,那波和零应该是在这个,也就说它排在AR的前面,明明它应该成为新的离,但是分区二的AR优先副本是临界点,但是呢,零节点不是零点节点,那怎么办?那这个不平衡的数我就要加一,那就记一个对吧,明明它应该是,但是不是我记个一,好那接下来AR的副本是多少呢?AR的总副本是四啊,一共它是四个副本吗?
04:20
那算这个不平衡比例的话,就是一除以四,那就是25%,那25%大于10%,那它就需要处罚再平衡,自动的帮你进行一个平衡处理。啊,就是这么来算的啊,那除了这个之外,你看一下其他节点。像这个博二和博三,哎,跟这个博零是一样的啊,你假如说你看他明明这个三应该是,但是结果呢,被零抢了,那被零抢的话,它就有一个不不平衡节点,那总数呢,副本数是四,那就占25%,那它仍然也要触发一个再平衡,那这也是三啊,还有一个节点呢,是二二号节点,那看一下这个二号节点是不是也是一样的,那二号节点呢,它正常应该是它会成为leader,因为它排在前面吗?但是实际上被三强了,那部分应比例仍然是25%啊,需要处罚占平衡。
05:06
那说一下在生产环境当中,这个值我们要不要给它制成处呢?于是把这个功能开启呢?那一般呢,建议大家呢,不要把它开启啊,你看其实这样的话,0123,它均匀的一个粒子分布,是不是也能满足我们的要求啊,啊也是均匀分布了,但是呢,你要是按照这个算法的话,它就不满足啊,不满足的话就要触发再平衡,但是触发再平衡这里面消耗大量性能,因为你得等待啊,你得把这个力哎都已经均匀分布完之后,才能进行生产和消费相关操作,那这样呢,是影响你对应的卡卡性能的,就是一般情况下不建议大家摆这个地方支撑处。如果你非得要质正处的话,那也建议大家把这个10%,哎,可以适当的扩大一下,比如说20%,30%啊,甚至稍微再大一点是吧,哎这样呢会更合理一下,就是原则就是不要频繁的触发这个平衡相关操作,因为它浪费集群大量的一个性能。
我来说两句