Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Nesta página, você encontra etapas de solução de problemas e informações sobre problemas comuns com o acionador do Airflow.
Bloqueio de operações no acionador
Às vezes, as tarefas assíncronas podem ser bloqueadas em acionadores. Na maioria dos casos, os problemas vêm de recursos insuficientes do acionador ou de problemas com o código do operador assíncrono personalizado.
Os registros do acionador mostram mensagens de aviso que podem ajudar você a identificar as causas principais da diminuição no desempenho do acionador. Há dois avisos importantes a serem procurados.
Thread assíncrona bloqueada
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
Esse aviso indica problemas de performance devido a um grande volume de tarefas assíncronas.
Solução: para resolver esse problema, alocar mais recursos aos acionadores, reduzir o número de tarefas adiadas que são executadas ao mesmo tempo ou aumentar o número de acionadores no seu ambiente. Embora os acionadores processem tarefas adiáveis, os workers são responsáveis por iniciar e concluir cada tarefa. Se você estiver ajustando o número de acionadores, considere também escalonar o número de instâncias de worker.
Uma tarefa específica bloqueou a linha de execução assíncrona.
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
Esse aviso aponta para uma parte específica do código do operador executada pelo Cloud Composer. Os gatilhos precisam usar a biblioteca
asyncio
para executar operações em segundo plano. Uma implementação personalizada de um gatilho pode não aderir corretamente aos contratosasyncio
(por exemplo, devido ao uso incorreto das palavras-chaveawait
easync
no código Python).Solução: inspecione o código informado pelo aviso e verifique se a operação assíncrona foi implementada corretamente.
Muitos gatilhos
O número de tarefas adiadas fica visível na métrica task_count
, que também é mostrada no painel do Monitoring do seu ambiente. Cada gatilho
cria alguns recursos, como conexões com recursos externos, que consomem
memória.

Os gráficos de consumo de memória e CPU indicam que recursos insuficientes causam reinicializações porque a sondagem de atividade falha devido à falta de pulsações:

Solução: para resolver esse problema, alocar mais recursos aos acionadores, reduzir o número de tarefas adiadas que são executadas ao mesmo tempo ou aumentar o número de acionadores no seu ambiente.
Falha de um worker do Airflow durante a execução do callback
Depois que o gatilho termina a execução, o controle retorna a um worker do Airflow, que executa um método de callback usando um slot de execução. Essa fase é controlada pelo Celery Executor e, portanto, os limites de configuração e recursos correspondentes se aplicam (como parallelism
ou worker_concurrency
).
Se o método de callback falhar no worker do Airflow, o worker falhar ou o
worker que executa o método for reiniciado, a tarefa será marcada como FAILED
. Nesse caso, a operação de nova tentativa reexecuta toda a tarefa, não apenas o método de callback.
Loop infinito em um acionador
É possível implementar um operador de acionamento personalizado de forma que ele bloqueie totalmente o loop do acionador principal, para que apenas o acionador interrompido seja executado por vez. Nesse caso, um aviso é gerado nos registros do acionador depois que o acionador problemático é concluído.
Classe de gatilho não encontrada
Como a pasta de DAGs não está sincronizada com o gatilho do Airflow, o código de gatilho inline fica faltando quando o gatilho é executado. O erro é gerado nos registros da tarefa com falha:
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
Solução: importe o código ausente do PyPI.
Mensagem de aviso sobre o acionador na interface do Airflow
Em alguns casos, depois que o gatilho é desativado, a seguinte mensagem de aviso pode aparecer na interface do Airflow:
The triggerer does not appear to be running. Last heartbeat was received
4 hours ago. Triggers will not run, and any deferred operator will remain
deferred until it times out or fails.
O Airflow pode mostrar essa mensagem porque gatilhos incompletos permanecem no banco de dados do Airflow. Essa mensagem geralmente significa que o acionador foi desativado antes que todos os acionadores fossem concluídos no seu ambiente.
Para conferir todos os gatilhos em execução no ambiente, acesse a página
Procurar > Gatilhos na interface do Airflow (a função Admin
é
obrigatória).
Soluções:
- Ative o acionador novamente e aguarde a conclusão das tarefas adiadas.
- Acesse o banco de dados do Airflow e exclua manualmente os acionadores incompletos.
As tarefas permanecem no estado adiado depois que o acionador é desativado
Quando o acionador é desativado, as tarefas que já estão no estado adiado permanecem nesse estado até que o tempo limite seja atingido. Esse tempo limite pode ser infinito, dependendo da configuração do Airflow e do DAG.
Use uma das seguintes soluções:
- Marque manualmente as tarefas como reprovadas.
- Permita que o acionador conclua as tarefas.
Recomendamos desativar o acionador somente se o ambiente não executar operadores ou tarefas adiadas e se todas as tarefas adiadas estiverem concluídas.