Saltar al contenido

¿Qué determina la compensación del consumidor de Kafka?

Siéntete libre de divulgar nuestro espacio y códigos con otro, danos de tu ayuda para aumentar nuestra comunidad.

Solución:

Es un poco más complejo de lo que describiste.
El auto.offset.reset config se activa SOLO si su grupo de consumidores no tiene una compensación válida comprometida en algún lugar (2 almacenamientos de compensación admitidos ahora son Kafka y Zookeeper), y también depende del tipo de consumidor que use.

Si usa un consumidor de Java de alto nivel, imagine los siguientes escenarios:

  1. Tiene un consumidor en un grupo de consumidores group1 que ha consumido 5 mensajes y ha muerto. La próxima vez que inicie este consumidor, ni siquiera usará eso auto.offset.reset config y continuará desde el lugar donde murió porque solo obtendrá el desplazamiento almacenado del almacenamiento de desplazamiento (Kafka o ZK como mencioné).

  2. Tiene mensajes en un tema (como usted describió) y comienza un consumidor en un nuevo grupo de consumidores group2. No hay ninguna compensación almacenada en ninguna parte y esta vez el auto.offset.reset config decidirá si comenzar desde el principio del tema (earliest) o desde el final del tema (latest)

Una cosa más que afecta a qué valor de compensación corresponderá earliest y latest configs es la política de retención de registros. Imagina que tienes un tema con retención configurada en 1 hora. Produces 5 mensajes y luego, una hora después, publicas 5 mensajes más. El latest el desplazamiento seguirá siendo el mismo que en el ejemplo anterior, pero el earliest uno no va a poder ser 0 porque Kafka ya eliminará estos mensajes y, por lo tanto, la primera compensación disponible será 5.

Todo lo mencionado anteriormente no está relacionado con SimpleConsumer y cada vez que lo ejecute, decidirá por dónde empezar usando el auto.offset.reset configuración

Si usa una versión de Kafka anterior a 0.9, debe reemplazar earliest, latest con smallest,largest.

Solo una actualización: desde Kafka 0.9 en adelante, Kafka está usando una nueva versión de Java del consumidor y los nombres de los parámetros auto.offset.reset han cambiado; Del manual:

Qué hacer cuando no hay un desplazamiento inicial en Kafka o si el desplazamiento actual ya no existe en el servidor (por ejemplo, porque esos datos se han eliminado):

más temprano: restablece automáticamente el desplazamiento al primer desplazamiento

último: restablece automáticamente el desplazamiento al último desplazamiento

ninguna: lanza una excepción al consumidor si no se encuentra una compensación anterior para el grupo del consumidor

cualquier otra cosa: lanzar una excepción al consumidor.

Pasé un tiempo para encontrar esto después de verificar la respuesta aceptada, así que pensé que podría ser útil para la comunidad publicarlo.

Además, hay compensaciones.retención.minutos. Si el tiempo desde la última confirmación es > offsets.retention.minutesentonces auto.offset.reset también entra en acción

Si sostienes algún dificultad o capacidad de regenerar nuestro sección te mencionamos añadir un paráfrasis y con gusto lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *