← 返回文章

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 中的数据未被消费,那么数据可能会存在丢失的情况。