Алгоритм балансировки потребительской нагрузки Kafka

Kafka

Есть тема: test, далее раздел этой темы и брокер, где они находятся, таковы:

    1. 其中 broker有两个,也就是服务器有两台。
    2. partition有6个,分布按照如图所示,按照哈希取模的算法分配。
    3. 消费者有8个,他们属于同一个消费组。

Если это так, как показано на рисунке, как потребители в этой группе потребления получат данные kafka?

На самом деле потребительская сторона Kafka имеет алгоритм балансировки, алгоритм следующий:

    1. A=(partition数量/同组内消费者总个数) 
    2. M=对上面所得到的A值小数点第一位向上取整 
    3. 计算出该消费者拉取数据的patition合集:Ci = [P(M*i )~P((i + 1) * M -1)]

Как показано на рисунке, то здесь:

    A=6/8=0.75
    M=1
    C0=[P(1*0)~P((0+1)*1-1)]=[P0~P0] 
    
    同理:
    C1=[P(1*1)~P((1+1)*1-1)]=[P1~P1] 
    C2=[P(1*2)~P((2+1)*1-1)]=[P2~P2] 
    C3=[P(1*3)~P((3+1)*1-1)]=[P3~P3] 
    C4=[P(1*4)~P((4+1)*1-1)]=[P4~P4] 
    C5=[P(1*5)~P((5+1)*1-1)]=[P5~P5] 
    C6=[P(1*6)~P((6+1)*1-1)]=[P6~P6] 
    C7=[P(1*7)~P((7+1)*1-1)]=[P7~P7]

Далее по вышеописанному алгоритму:

    C0消费者消费P0的数据 
    C1消费者消费P1的数据 
    C2消费者消费P2的数据 
    C3消费者消费P3的数据 
    C4消费者消费P4的数据 
    C5消费者消费P5的数据
    
    C6消费者消费P6的数据 
    C7消费者消费P7的数据

Однако в разделе есть только P0-P5, а P6 и P7 вообще отсутствуют, поэтому эти два потребителя эквивалентны бездействию, что эквивалентно занятию ресурсов, но это бесполезно, поэтому реальная роль - C0-C5. здесь.
Как показано ниже:

Что делать, если потребителей в этой группе потребителей меньше, чем количество разделов (например, 5)?Затем рисуем черпак по тыкве, по вышеописанному алгоритму:

    A=6/5=1.2 
    M=2
    
    C0=[P(2*0)~P((0+1)*2-1)]=[P0~P1] 
    C1=[P(2*1)~P((1+1)*2-1)]=[P2~P3] 
    C2=[P(2*2)~P((2+1)*2-1)]=[P4~P5]
    
    C3=[P(2*3)~P((3+1)*2-1)]=[P6~P7] 
    C4=[P(2*4)~P((4+1)*2-1)]=[P8~P9]

Как и выше, C3 и C4 не действуют.

Следующее:

Суммировать:

1. Согласно приведенному выше алгоритму, если группе потребителей kafka необходимо увеличить количество участников, максимальное увеличение будет таким же, как и количество разделов, а лишние участники будут только занимать ресурсы, но не будут работать.

2. Количество партиций в кафке должно быть больше, чем количество членов группы потребителей, а количество партиций должно быть равно 0 по модулю членов группы потребителей, иначе некоторые потребители будут занимать ресурсы, но не работать.

3. Если вам необходимо увеличить количество участников в группе потребителей, вам также необходимо настроить количество разделов по вышеописанному алгоритму.

Справочный источник:blog.CSDN.net/QQ_20641565…