Invalid Resume Token
Nesta página
Visão geral
Saiba como recuperar de um token de currículo inválido em um conector de origem MongoDB Kafka.
Stack Trace
O seguinte traçado de pilha indica que o conector de origem tem um token de currículo inválido:
... org.apache.kafka.connect.errors.ConnectException: ResumeToken not found. Cannot create a change stream cursor ... Command failed with error 286 (ChangeStreamHistoryLost): 'PlanExecutor error during aggregation :: caused by :: Resume of change stream was not possible, as the resume point may no longer be in the oplog ...
Causa
Quando o ID do token de currículo do conector de origem não corresponde a nenhuma entrada nooplog da implantação do MongoDB, o conector não tem como determinar por onde começar a processar o fluxo de alterações do MongoDB. Clique nas guias a seguir para ver os cenários em que você pode enfrentar esse problema:
Nesse cenário, você pausa o conector de origem e preenche o oplog da deployment do MongoDB:
Você inicia um sistema do Kafka com um conector de origem MongoDB Kafka.
Você produz um evento de alteração em seu namespace de origem do MongoDB e seu conector armazena um token de retomada correspondente a este evento.
Você pausa seu conector de origem.
Enquanto o conector pausa, você preenche o oplog do MongoDB de forma que o MongoDB exclua a entrada do oplog correspondente ao seu token de currículo.
Você reinicia o conector de origem e ele não consegue retomar o processamento, pois o token de retomada não existe no oplog do MongoDB.
Nesse cenário, seu connector de origem escuta alterações em um namespace MongoDB atualizado com pouca frequência e o recurso de pulsação não está habilitado:
Você inicia um sistema do Kafka com um conector de origem MongoDB Kafka.
Você produz um evento de alteração em seu namespace de origem do MongoDB e seu conector armazena um token de retomada correspondente a este evento.
Seu namespace MongoDB de origem não é atualizado no tempo que leva para que seu sistema MongoDB gire o evento de alteração correspondente ao seu token de retomada fora de seu oplog.
Você produz um evento de alteração em seu namespace de origem MongoDB do e seu de origem connector não consegue retomar o processamento, pois seu token de retomada não existe em seu MongoDB oplog do .
Para obter mais informações sobre o oplog, consulte o Manual do MongoDB.
Para obter mais informações sobre fluxos de alteração, consulte o guia Change Streams .
Soluções
Você pode recuperar de um token de currículo inválido usando uma das seguintes estratégias:
Tolerar erros temporariamente
Você pode configurar o connector de origem para tolerar erros enquanto produz um evento de fluxo de alterações que atualiza o token de retomada do connector. Essa estratégia de recuperação é a mais simples, mas há o risco de que o connector ignore brevemente erros não relacionados ao token de currículo inválido. Se você não se sentir confortável em tolerar brevemente erros em seu sistema, poderá excluir os deslocamentos armazenados .
Para configurar o conector de origem para tolerar temporariamente erros:
Defina a opção
errors.tolerance
para tolerar todos os erros:errors.tolerance=all Insira, atualize ou exclua um documento na coleção referenciada pelo conector de origem para produzir um evento de fluxo de alterações que atualize o token de retomada do conector.
Depois de produzir um evento de fluxo de alteração, defina a opção
errors.tolerance
para não tolerar mais erros:errors.tolerance=none
Para obter mais informações sobre a opção errors.tolerance
, consulte a página Propriedades de tratamento de erros e retomada após interrupção.
Redefinir deslocamentos armazenados
Você pode redefinir seus dados de compensação do Kafka Connect, que contêm seu token de currículo, para permitir que seu conector continue processando seu fluxo de alterações.
Para redefinir seus dados de deslocamento, altere o valor da propriedade de configuração do offset.partition.name
para um nome de partição que não existe em seu sistema do Kafka. Você pode definir sua propriedade offset.partition.name
assim:
offset.partition.name=<a string>
Dica
Nomeando suas partições de deslocamento
Considere usar o seguinte padrão para nomear suas partições de deslocamento:
offset.partition.name=<source connector name>.<monotonically increasing number>
Esse padrão oferece os seguintes benefícios:
Registra o número de vezes que você redefine seu conector
Documentos ao qual conector pertence uma partição offset
Por exemplo, se você nomeou seu conector de origem "source-values"
e está configurando a propriedade offset.partition.name
pela primeira vez, configure seu conector da seguinte maneira:
offset.partition.name=source-values.1
Da próxima vez que redefinir os dados de deslocamento do seu conector, configure o conector da seguinte forma:
offset.partition.name=source-values.2
Para saber mais sobre a propriedade de configuração offset.partition.name
, consulte a página Tratamento de erros e retomada a partir de propriedades de interrupção.
Para saber como nomear seu connector, consulte o oficial Apache Kafka documentação.
Prevenção
Para evitar erros de token de currículo inválidos causados por um namespace atualizado com pouca frequência, ative o heartbeats. O Heartbeats é um recurso do seu connector de origem que faz com que seu connector atualize seu token de currículo em intervalos regulares, bem como quando o conteúdo do namespace MongoDB de origem muda.
Especifique a seguinte opção na configuração do conector de origem para ativar heartbeats:
heartbeat.interval.ms=<a positive integer>
Para saber mais sobre pulsações, consulte o guia Tratamento de erros e retomada das propriedades de interrupção.