Kafka 的 rééquilibrage

Contexte

Une fois que j'ai vu le rééquilibrage de kafka, j'ai pensé que c'était très intéressant, alors j'ai essayé moi-même

conception expérimentale

Concevez un sujet avec 3 partitions pour vérifier la relation entre les partitions de temps des consommateurs 1, 2, 3 et 4 et les consommateurs respectivement

Procédure expérimentale

  1. Créer un sujet avec 3 partitions
//创建TopicName为topic-partition3的Topic并设置分区数为3以及副本数为1
@Bean
public NewTopic initialTopic() {
    return new NewTopic("topic-partition3",3, (short) 1 );
}
复制代码
  1. Un producteur produit une donnée à chacune des 3 partitions toutes les 1000ms
@Test
public void testProducer() throws InterruptedException {
    for (int i = 0; i < 5000; i++) {
        kafkaTemplate.send("topic-partition3", 0, null, "data package from partition0 [" + i + "]");
        kafkaTemplate.send("topic-partition3", 1, null, "data package from partition1 [" + i + "]");
        kafkaTemplate.send("topic-partition3", 2, null, "data package from partition2 [" + i + "]");
        //休眠1秒
        Thread.sleep(1000);
    }
}
复制代码
  1. Consommer des données une par une dans le même groupe de consommateurs, chacun prend 800 ms
//声明consumerID为ypq-consumer, 消费组ypq-group, 为监听topicName为topic-partition3的Topic
@KafkaListener(id = "ypq-consumer", groupId = "ypq-group", topics = "topic-partition3")
public void listen(String msgData) throws InterruptedException {
    LOGGER.info("consume data : " + msgData);
    // 模拟耗时处理
    Thread.sleep(800);
}
复制代码
  1. Lorsqu'il n'y a qu'un seul consommateur, C1 imprimeypq-group: partitions assigned: [topic-partition3-1, topic-partition3-2, topic-partition3-0]
  2. Lorsqu'il y a deux consommateurs, C1 imprime ypq-group: partitions assigned: [topic-partition3-1, topic-partition3-0], C2 imprimeypq-group: partitions assigned: [topic-partition3-2]
  3. Trois consommateurs, impression C1 ypq-group: partitions assigned: [topic-partition3-0], impression C2 ypq-group: partitions assigned: [topic-partition3-1], impression C3ypq-group: partitions assigned: [topic-partition3-2]
  4. Lorsqu'il y a quatre consommateurs, C1-3 imprime sans changement, C4 imprimeypq-group: partitions assigned: []

Statistiques expérimentales

nombre de consommateurs P1 P2 P3
1 C1 C1 C1
2 C1 C1 C2
3 C1 C2 C3
4 C1 C2 C3

Résumer

  1. Lorsque le nombre de consommateurs est supérieur au nombre de partitions, des consommateurs inactifs sont générés, car chaque partition ne peut être consommée que par un seul consommateur au maximum
  2. La stratégie de rééquilibrage par défaut de Kafka est la plage, et le reste du nombre de partitions du nombre de consommateurs sera alloué aux principaux consommateurs, de sorte que les principaux consommateurs subissent une forte pression
  3. Il n'est pas garanti que les données de différentes partitions sous le même sujet soient en ordre, mais les données de la même partition sont garanties d'être en ordre
  4. Si un consommateur veut consommer en multithread, il doit assurer lui-même l'ordre des données de la consommation multithread
  5. Les consommateurs doivent également envisager des scénarios de consommation répétée de données

Je suppose que tu aimes

Origine juejin.im/post/7087495701642346526
conseillé
Classement