Eu sou relativamente novo em Kafka. Eu experimentei um pouco, mas algumas coisas não estão claras para mim em relação à compensação do consumidor. Pelo que entendi até agora, quando um consumidor inicia, o deslocamento do qual ele começará a ler é determinado pela configuração auto.offset.reset
(corrija-me se estiver errado).
Agora diga, por exemplo, que há 10 mensagens (compensações de 0 a 9) no tópico, e um consumidor consumiu 5 delas antes de cair (ou antes de eu matar o consumidor). Então diga que eu reinicio esse processo do consumidor. Minhas perguntas são:
Se o
auto.offset.reset
estiver definido comosmallest
, sempre começará a consumir a partir do deslocamento 0?Se o
auto.offset.reset
estiver definido comolargest
, começará a consumir a partir do deslocamento 5?O comportamento em relação a esse tipo de cenário é sempre determinístico?
Por favor, não hesite em comentar se algo na minha pergunta não estiver claro. Desde já, obrigado.
fonte
auto.offset.reset
isso não terá mais significado a partir de então? O único significado dessa configuração é quando não há nada comprometido (e, idealmente, isso seria na primeira inicialização do consumidor)?auto.offset.reset
e continuará a partir do deslocamento confirmado. Se você sempre usa grupo de consumidores diferente (como gerá-lo ao iniciar o consumidor), então o consumidor vai sempre respeitarauto.offset.reset
Apenas uma atualização: do Kafka 0.9 em diante, o Kafka está usando uma nova versão Java do consumidor e os nomes dos parâmetros auto.offset.reset foram alterados; Do manual:
Eu gastei algum tempo para encontrar isso depois de verificar a resposta aceita, então achei que seria útil para a comunidade publicá-la.
fonte
Além disso, há offsets.retention.minutes. Se o tempo desde o último commit for>
offsets.retention.minutes
,auto.offset.reset
também entra em açãofonte
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> Depois que um grupo de consumidores perde todos os seus consumidores (ou seja, fica vazio), suas compensações serão mantidas por esse período de retenção antes de serem descartadas. </b> Para autônomo consumidores (usando a atribuição manual), as compensações expirarão após o horário da última confirmação mais esse período de retenção. (Isto é paraKafka 2.3
)