Del pasaje proporcionado, extrae los lenguajes de programación que admite Flink. Sepáralos con una coma.
Flink proporciona un motor de streaming de alto rendimiento y baja latencia, así como soporte para el procesamiento de eventos y la gestión de estados. Las aplicaciones Flink son tolerantes a fallos en caso de fallo de la máquina y admiten la semántica "exactamente una vez". Los programas pueden escribirse en Java, Scala, Python, y SQL y se compilan y optimizan automáticamente en programas de flujo de datos que se ejecutan en un entorno de clúster o nube.
Java, Scala, Python, SQL