¿Qué compensación del consumidor se establecerá si auto.offset.reset = primero pero el tema no tiene mensajes?

5

Tengo la versión 2.4 del servidor Kafka y configuro log.retention.hours = 168 (para que los mensajes del tema se eliminen después de 7 días) y auto.offset.reset = early (de modo que si el consumidor no obtiene el último comprometido offset, entonces debe procesarse desde el principio). Y como estoy usando la versión Kafka 2.4, el valor predeterminado offsets.retention.minutes = 10080 (ya que no estoy configurando esta propiedad en mi aplicación).

Los datos de mi tema son : 1,2,3,4,5,6,7,8,9,10

compensación del consumidor actual antes de apagar el consumidor : 10

Desplazamiento final : 10

última compensación comprometida por el consumidor : 10

Entonces, digamos que mi consumidor no se está ejecutando durante los últimos 7 días y que comencé con el consumidor en el octavo día. Entonces, mi último desplazamiento comprometido por el consumidor expirará (debido a la propiedad offsets.retention.minutes = 10080 ) y los mensajes del tema también se eliminarán (debido a la propiedad log.retention.hours = 168 ).

Entonces, ¿quería saber qué compensación del consumidor se establecerá ahora con la propiedad auto.offset.reset = primera ?

0
2

Aunque no hay datos disponibles en el tema de Kafka, sus corredores aún conocen el "próximo" desplazamiento dentro de esa partición. En su caso, el primer y último desplazamiento de este tema es 10que no contiene ningún dato.

Por lo tanto, su consumidor que ya ha comprometido el desplazamiento 10 intentará leer 11 cuando se inicie de nuevo, independientemente de la configuración del consumidor auto.offset.reset.

Su ejemplo se volverá aún más interesante cuando su tema haya tenido compensaciones, digamos, hasta el 15, mientras que el consumidor se cerró después de comprometer la compensación 10. Ahora, imagine que se eliminaron todas las compensaciones del tema debido a la política de retención. Si luego inicia su consumidor solo, la configuración del consumidor auto.offset.resetentra en vigencia como se indica en la documentación:

"What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted)"

Mientras el tema de Kafka esté vacío, no hay ningún "conjunto" de compensación para el consumidor. El consumidor simplemente intenta encontrar la siguiente compensación disponible, ya sea basándose en

  • la última compensación comprometida o,
  • en caso de que el último desplazamiento comprometido ya no exista, la configuración proporcionada auto.offset.reset.

Solo como una nota adicional: aunque los mensajes parecen ser limpiados por la política de retención, es posible que todavía vea algunos datos en el tema debido a que los datos aún permanecen en el tema de Kafka incluso después del tiempo / tamaño de retención

0

Una vez que el grupo de consumidores se elimine del registro, auto.offset.resettendrá prioridad y los consumidores comenzarán a consumir datos desde el principio.

My Topic data is : 1,2,3,4,5,6,7,8,9,10

Si el tema tiene los datos anteriores, el consumidor comenzará desde el principio y se consumirán todos los registros de 1 a 10

My Topic data is : 11,12,13,14,15,16,17,18,19,20

En este caso, si los datos antiguos se purgan debido a la retención, el consumidor restablecerá el desplazamiento al más temprano (el desplazamiento más temprano disponible en ese momento) y comenzará a consumir desde allí, por ejemplo, en este escenario consumirá todo de 11 a 20 (desde 1 a 10 se purgan)