Reequilibrio de Kafka

antecedentes

Una vez que vi el reequilibrio de kafka, pensé que era muy interesante, así que lo probé yo mismo.

diseño experimental

Diseñe un tema con 3 particiones para verificar la relación entre las particiones de tiempo del consumidor 1, 2, 3 y 4 y los consumidores respectivamente

Procedimiento experimental

  1. Crear un tema con 3 particiones
//创建TopicName为topic-partition3的Topic并设置分区数为3以及副本数为1
@Bean
public NewTopic initialTopic() {
    return new NewTopic("topic-partition3",3, (short) 1 );
}
复制代码
  1. Un productor produce un dato para cada una de las 3 particiones cada 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. Consumiendo datos uno por uno en el mismo grupo de consumidores, cada uno toma 800ms
//声明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. Cuando solo hay un consumidor, C1 imprimeypq-group: partitions assigned: [topic-partition3-1, topic-partition3-2, topic-partition3-0]
  2. Cuando hay dos consumidores, C1 imprime ypq-group: partitions assigned: [topic-partition3-1, topic-partition3-0], C2 imprimeypq-group: partitions assigned: [topic-partition3-2]
  3. Tres consumidores, impresión C1 ypq-group: partitions assigned: [topic-partition3-0], impresión C2 ypq-group: partitions assigned: [topic-partition3-1], impresión C3ypq-group: partitions assigned: [topic-partition3-2]
  4. Cuando hay cuatro consumidores, C1-3 imprime sin cambios, C4 imprimeypq-group: partitions assigned: []

Estadísticas Experimentales

número de consumidores P1 P2 P3
1 C1 C1 C1
2 C1 C1 C2
3 C1 C2 C3
4 C1 C2 C3

Resumir

  1. Cuando la cantidad de consumidores es mayor que la cantidad de particiones, se generan consumidores inactivos, porque cada partición solo puede ser consumida por un consumidor como máximo.
  2. La estrategia de reequilibrio predeterminada de Kafka es el rango, y el resto de la cantidad de particiones a la cantidad de consumidores se asignará a los principales consumidores, por lo que los principales consumidores están bajo una gran presión.
  3. No se puede garantizar que los datos en diferentes particiones bajo el mismo tema estén en orden, pero se garantiza que los datos en la misma partición estén en orden
  4. Si un consumidor quiere consumir subprocesos múltiples, debe garantizar el orden de datos del consumo de subprocesos múltiples por sí mismo.
  5. Los consumidores también deben considerar escenarios de consumo repetido de datos.

Supongo que te gusta

Origin juejin.im/post/7087495701642346526
Recomendado
Clasificación