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:
-
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á esoauto.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é). -
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 elauto.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.minutes
entonces 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.