kafka高可用问题
假设kafka有5个broker,3个replica,最多能挂几个broker?
没错,题目就是我的问题:
假设kafka有5个broker,3个replica,最多能挂几个broker?
还有 假设 kafka 有 5 个 broker, 5 个 replica,最多能挂几个broker?
想知道这两个问题的答案,需要先了解 majority 的作用以及它是如何计算的。
majority
majority 的作用是:当 kafka 中某个 partition 的 leader relica 挂掉以后,该 partition 剩下的 replica 必须大于等于 majority 时,才能选举出新的 leader replica。
majority 的计算公式:
[(replica 数 -1)/ 2 ] +1
注: [ ] 表示向下取整
所以,计算一下, 3 replica 时, majority = [(3-1)/2]+1 = 2
5 replica 时, majority = [(5-1)/2]+1=3
答案一
所以,kafka有 5 个 broker ,每个 partition 有 5 个 replica 时, replica 至少要达到 3 ,才能选举出新的 leader replica,所以最多可以挂掉的 kafka broker 数的答案是 2 ( 5 - 3 = 2 )。
那 为什么 kafka 有 5 个 broker,每个 partition 有 3 个 replica 时,最多可以挂掉的 kafka broker 数 不是 3 ( 5 - 2 = 3) 呢?
答案二
理想情况终归是要与实际情况相结合才能实现么,
所以,举个例子,模拟一下 kafka 有 5 个 broker (broker1 - broker5),有 3 个 partition(p0 - p2),每个 partition 有 3 个 replica 时的情况:
P0:
Leader replica 在 Broker 1
Follower replica 在 Broker 2
Follower replica 在 Broker 3
P1:
Leader replica 在 Broker 2
Follower replica 在 Broker 4
Follower replica 在 Broker 5
P2:
Leader replica 在 Broker 3
Follower replica 在 Broker 1
Follower replica 在 Broker 4
如果假设有 3 个 broker 挂掉了,例如 broker 1 、broker 2 和 broker 4 ,可以看到 p0 只有 1 个 replica ,p1 和 p2 也只有 1 个 replica。
它们的数量都小于 majority ,无法正常选举,所以这个 topic 无法被生产和消费,也就意味着无法工作。
如果假设有 2 个 broker 挂掉了,例如 broker 1 和 broker 4 ,可以看到只有 p2 是 1 个 replica ,p0 和 p1 都有 2 个 replica。
所以 p1 和 p2 是可以正常工作的。
所以,第二个问题答案:
假设kafka有5个broker,3个replica,最多能挂几个broker? 答案也是 2 个。
衍生问题
假设往 kafka 中生产的数据十分重要,我需要保证数据不存在丢失的情况下,
假设 kafka 有 5 个 broker,最多能挂 2 个 broker 时,每个 partition 的 replica 的数量是多少?
答案是 4,如果 每个 partition 的 replica 数量是 3 时,会有部分的 partition 不可用,如果该 partition 中的数据未被消费,那么数据可能会存在丢失的情况。