Diretrizes para usar extensões Python no Openflow¶
Este tópico descreve as limitações, configurações compatíveis e práticas recomendadas ao usar extensões Python no Openflow.
Os processadores Python no Openflow usam a arquitetura de ponte Py4J do NiFi, que tem características de recursos fundamentalmente diferentes dos processadores Java nativos. Como os processadores Python são executados como processos de OS externos fora do JVM, eles consomem memória adicional do sistema, não são regidos pelo gerenciamento de recursos interno do NiFi e têm observabilidade limitada. Essas diferenças afetam o dimensionamento do tempo de execução, o planejamento de capacidade e o monitoramento.
Diferenças de arquitetura¶
Os processadores Python são executados como processos de OS externos em vez de dentro do JVM. Essa arquitetura afeta a forma como os recursos são alocados, monitorados e gerenciados:
Tipo de processador |
Processador Java |
Processador Python |
|---|---|---|
Ambiente de tempo de execução |
Threads internos (JVM) |
Processo de OS externo |
Gerenciamento de memória |
Gerenciado dentro do heap JVM |
Memória de processo separada |
Ciclo de vida |
Controlado por NiFi |
Ciclo de vida do processo externo |
Monitoramento |
Observabilidade NiFi completa |
Visibilidade limitada |
Restrições de tamanho do tempo de execução¶
As extensões Python estão disponíveis apenas em tempos de execução Medium e Large. Os tempos de execução Small não são compatíveis com processadores Python devido a restrições de memória e CPU. O Snowflake OpenFlow bloqueia extensões Python em tempos de execução Small:
Tamanho do tempo de execução |
Suporte para Python |
Notas |
|---|---|---|
Small |
Sem suporte |
Os processadores Python são bloqueados em tempos de execução Small devido a restrições de memória e CPU. |
Medium |
Limitado (até 2 processadores Python) |
O limite se aplica a todo o tempo de execução, não por grupo de processos ou conector. Esse limite é atualmente uma recomendação que se tornará um valor máximo obrigatório para tempos de execução do OpenFlow no futuro. |
Large |
Limitado (até 4 processadores Python) |
O limite se aplica a todo o tempo de execução, não por grupo de processos ou conector. Esse limite é atualmente uma recomendação que se tornará um valor máximo obrigatório para tempos de execução do OpenFlow no futuro. |
Práticas recomendadas¶
Siga estas diretrizes para trabalhar com processadores Python no OpenFlow:
Use Java para operações que exigem muita CPU. O Java oferece um gerenciamento de threads mais eficiente dentro do JVM. A linguagem de script Groovy é uma alternativa baseada em Java.
Use tempos de execução Medium ou Large. O Python não está disponível em tempos de execução Small.
Limite o número de processadores Python. Respeite os limites documentados por tamanho de tempo de execução.
Monitore o uso de recursos. Observe a pressão na memória e a contenção de CPU.
Planeje atualizações. Processadores Python personalizados podem exigir uma redefinição do ambiente virtual (venv) após atualizações de tempo de execução. Para obter mais informações, consulte Restaurar processadores Python após atualizações de tempo de execução.
Use processadores Python de thread único. O Openflow não é compatível com processadores Python que criam subprocessos ou usam multithreading.
Limitações no uso de processadores Python¶
As seguintes limitações se aplicam ao usar processadores Python no Openflow.
- Restrições de tempo de execução
Só é possível utilizar extensões Python com tempos de execução Medium ou Large. Extensões Python não podem ser utilizadas com tempos de execução Small. Isso é desativado pela plataforma.
- Sobrecarga de memória
Cada processador Python cria um processo de OS externo com o próprio volume de memória. Os processos Python podem competir coletivamente com o JVM por recursos.
- Sem gerenciamento de recursos NiFi
Os processadores Python não são observados ou limitados pelo gerenciamento de recursos interno do NiFi. Operações Python que exigem muita CPU podem consumir aproximadamente 50% do tempo total da CPU do servidor.
- Lacunas de monitoramento
A plataforma não oferece visibilidade sobre a integridade e o consumo de recursos dos processos Python externos.
- Tratamento de atualizações
Após atualizações de tempo de execução, os processadores Python personalizados podem não carregar ou apresentar comportamento inesperado até que os ambientes virtuais sejam recriados.
Restaurar processadores Python após atualizações de tempo de execução¶
Se os processadores Python falharem após a atualização do tempo de execução, faça o seguinte:
Incremente a versão do processador no campo
ProcessorDetails.version.Recompile e reenvie o binário do arquivo NiFi (NAR). Isso aciona a reinicialização do cache do ambiente virtual Python.
Remova e adicione novamente o processador na tela. Isso aciona a reinicialização da ponte Py4J.