Soy relativamente nuevo en Kafka. He experimentado un poco con él, pero algunas cosas no me quedan claras con respecto a la compensación del consumidor. Por lo que he entendido hasta ahora, cuando un consumidor comienza, el desplazamiento desde el que comenzará a leer está determinado por la configuración auto.offset.reset
(corríjame si me equivoco).
Ahora, por ejemplo, digamos que hay 10 mensajes (compensaciones de 0 a 9) en el tema, y un consumidor consumió 5 de ellos antes de que cayera (o antes de que matara al consumidor). Luego diga que reinicio ese proceso del consumidor. Mis preguntas son:
Si
auto.offset.reset
se establece ensmallest
, ¿siempre comenzará a consumir desde el desplazamiento 0?Si
auto.offset.reset
se establece enlargest
, ¿comenzará a consumir desde el desplazamiento 5?¿El comportamiento con respecto a este tipo de escenario es siempre determinista?
No dude en comentar si algo en mi pregunta no está claro. Gracias por adelantado.
fuente
auto.offset.reset
¿no tiene ningún significado después? ¿El único significado de esa configuración es cuando no hay nada comprometido (e idealmente eso sería en la primera puesta en marcha del consumidor)?auto.offset.reset
y continuará desde el desplazamiento comprometido. Si siempre usa un grupo de consumidores diferente (como generarlo al iniciar el consumidor), entonces el consumidor siempre respetaráauto.offset.reset
Solo una actualización: desde Kafka 0.9 en adelante, Kafka está utilizando una nueva versión Java del consumidor y los nombres de los parámetros auto.offset.reset han cambiado; Del manual:
Pasé algún tiempo para encontrar esto después de verificar la respuesta aceptada, así que pensé que podría ser útil para la comunidad publicarla.
fuente
Más aún hay compensaciones.retención.minutos. Si el tiempo desde la última confirmación es>
offsets.retention.minutes
,auto.offset.reset
también se activafuente
Prolong default value of offsets.retention.minutes to be at least twice larger than log.retention.hours.
issues.apache.org/jira/browse/KAFKA-3806offsets.retention.minutes
: <b> Después de que un grupo de consumidores pierde a todos sus consumidores (es decir, queda vacío), sus compensaciones se mantendrán durante este período de retención antes de ser descartadas. </b> Por separado consumidores (mediante asignación manual), las compensaciones caducarán después del último compromiso más este período de retención. (Esto es paraKafka 2.3
)