Create Confluent Manager for Apache Flink Applications
A CMF application is a deployed Apache Flink® job managed through a JSON or YAML specification. To create an application, you specify details of the application in a JSON or YAML file. Then use the Confluent CLI or REST API to create the application, passing the file as an argument.
Flink applications are deployed in Confluent Platform with Confluent Manager for Apache Flink (CMF), which is a central management component of Confluent Platform for Apache Flink. CMF enables you to manage a fleet of Flink jobs, either applications or SQL statements, across multiple environments.
The following sections describe the specification format, creation methods, and response structure.
Application specification format
The following JSON and YAML examples show equivalent application specifications.
{
"apiVersion": "cmf.confluent.io/v1",
"kind": "FlinkApplication",
"metadata": {
"name": "app-1"
},
"spec": {
"image": "confluentinc/cp-flink:1.19.3-cp1",
"flinkVersion": "v1_19",
"flinkConfiguration": {
"taskmanager.numberOfTaskSlots": "1"
},
"serviceAccount": "flink",
"jobManager": {
"resource": {
"memory": "1024m",
"cpu": 1
}
},
"taskManager": {
"resource": {
"memory": "1024m",
"cpu": 1
}
},
"job": {
"jarURI": "local:///opt/flink/examples/streaming/StateMachineExample.jar",
"state": "running",
"parallelism": 1,
"upgradeMode": "stateless"
}
}
}
apiVersion: cmf.confluent.io/v1
kind: FlinkApplication
metadata:
name: app-1
spec:
image: confluentinc/cp-flink:1.19.3-cp1
flinkVersion: v1_19
flinkConfiguration:
taskmanager.numberOfTaskSlots: "1"
serviceAccount: flink
jobManager:
resource:
memory: 1024m
cpu: 1
taskManager:
resource:
memory: 1024m
cpu: 1
job:
jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
state: running
parallelism: 1
upgradeMode: stateless
The application specification includes the following fields:
image: The name of the Docker image that is used to start the Flink cluster. CMF expects this image to be a Confluent Platform Flink image or to be derived from a Confluent Platform Flink image.flinkVersion: The Flink version corresponding to the Flink version of the Docker image.flinkConfiguration: A map of Flink configuration parameters. Before the configuration is passed to the Flink cluster, it is merged with the Environment’s default configuration for applications. The Flink configuration is used to configure cluster and job behavior, such as checkpointing, security, logging, and more. For more on Flink job configuration, see Configure Flink Jobs in Confluent Manager for Apache Flink.serviceAccount: The name of the Kubernetes service account that is used to start and run the application’s Flink cluster.jobManager&taskManager: The Kubernetes specification of the Flink Job Manager and Task Manager pods.job.jarURI: The path to the Flink job JAR file. To learn how to package Flink jobs and make the job JAR available to the cluster, see Package Flink Jobs.job.state: The desired state of the application. Can berunningorsuspended.job.parallelism: The desired execution parallelism of the application. Can be adapted to rescale the application.
Create the application
Use the REST API or the Confluent CLI to create the application. The following sections show examples of how to do this with a JSON file named app-1.json created using the app-1.json specification from the Specification section.
You can create the application using the REST API by passing the JSON file as an argument.
curl -v -H "Content-Type: application/json" \
-X POST http://cmf:8080/cmf/api/v1/environments/env-1/applications \
-d @/path/to/app-1.json
You can create the application using the Confluent CLI, passing the JSON file as an argument.
confluent --environment env-1 \
flink application create /path/to/app-1.json
Application response
The response returns the submitted application specification with added metadata fields such as creationTimestamp and updateTimestamp, and a status object. After receiving the response, CMF creates a Flink Deployment and submits it for execution.
The response to an application creation request specifying a JSON file could look like the following:
{
"apiVersion": "cmf.confluent.io/v1",
"kind": "FlinkApplication",
"metadata": {
"creationTimestamp": "2025-08-27T12:30:23.616863679Z",
"name": "app-1",
"updateTimestamp": "2025-08-27T12:30:23.616865470Z"
},
"spec": {
"flinkConfiguration": {
"taskmanager.numberOfTaskSlots": "1"
},
"flinkVersion": "v1_19",
"image": "confluentinc/cp-flink:1.19.3-cp1",
"job": {
"jarURI": "local:///opt/flink/examples/streaming/StateMachineExample.jar",
"parallelism": 1,
"state": "running",
"upgradeMode": "stateless"
},
"jobManager": {
"resource": {
"cpu": 1,
"memory": "1024m"
}
},
"serviceAccount": "flink",
"taskManager": {
"resource": {
"cpu": 1,
"memory": "1024m"
}
}
},
"status": {
"jobStatus": {
"jobName": "",
"state": ""
}
}
}