The Application Manager is a backend microservice in FlowX.AI that:

✅ Manages FlowX applications, versions, manifests, and configurations.
✅ Acts as a proxy for front-end resource requests.

The Application Manager and Runtime Manager share the same container image and Helm chart. Check the Deployment Guidelines in the release notes for version compatibility.

Infrastructure prerequisites

Before you start setting up the Application Manager service, ensure the following infrastructure components are in place:

ComponentVersionPurpose
PostgreSQL13+Storing application data
MongoDB4.4+Managing runtime builds
Redis6.0+Caching needs
Kafka2.8+Event-driven communication
OAuth2 Server-Authentication (Keycloak recommended)

Dependencies

The Application Manager relies on other FlowX services and components to function properly:

Core configuration environment variables

Basic service configuration

Environment VariableDescriptionExample ValueRequired
CONFIG_PROFILESpring configuration profilesk8stemplate_v2,kafka-authYes
MULTIPART_MAX_FILE_SIZEMaximum file upload size25MBNo
MULTIPART_MAX_REQUEST_SIZEMaximum request size25MBNo
LOGGING_CONFIG_FILELogging configuration filelogback-spring.xmlNo

Database configuration

PostgreSQL configuration

Environment VariableDescriptionExample ValueRequired
SPRING_DATASOURCE_URLPostgreSQL JDBC URLjdbc:postgresql://postgresql:5432/app_managerYes
SPRING_DATASOURCE_USERNAMEDatabase usernameflowxYes
SPRING_DATASOURCE_PASSWORDDatabase passwordpasswordYes
SPRING_DATASOURCE_DRIVER_CLASS_NAMEJDBC driver classorg.postgresql.DriverNo

MongoDB configuration

Environment VariableDescriptionExample ValueRequired
SPRING_DATA_MONGODB_URIMongoDB connection URImongodb://${DB_USERNAME}:${DB_PASSWORD}@mongodb-0.mongodb-headless:27017/app-runtime?retryWrites=falseYes
DB_USERNAMEMongoDB usernameapp-runtimeYes
DB_PASSWORDMongoDB passwordpasswordYes
SPRING_DATA_MONGODB_STORAGEStorage type (Azure environments only)mongodb (alternative: cosmosdb)No

Redis configuration

Environment VariableDescriptionExample ValueRequired
SPRING_REDIS_HOSTRedis server hostnameredis-masterYes
SPRING_REDIS_PASSWORDRedis passwordpasswordYes
SPRING_REDIS_PORTRedis server port6379No

Kafka configuration

Kafka connection and security variables

Environment VariableDescriptionExample ValueRequired
SPRING_KAFKA_BOOTSTRAP_SERVERSKafka broker addresseskafka-flowx-kafka-bootstrap:9092Yes
KAFKA_TOPIC_NAMING_ENVIRONMENTEnvironment prefixdev.Yes
KAFKA_MESSAGE_MAX_BYTESMaximum message size52428800 (50MB)No

OAuth authentication variables (when using SASL_PLAINTEXT)

Environment VariableDescriptionExample ValueRequired
KAFKA_OAUTH_CLIENT_IDOAuth client IDflowx-service-clientConditional
KAFKA_OAUTH_CLIENT_SECRETOAuth client secretflowx-service-client-secretConditional
KAFKA_OAUTH_TOKEN_ENDPOINT_URIOAuth token endpointhttps://auth-pr1180.dev3.flowxai.dev/auth/realms/kafka-authz/protocol/openid-connect/tokenConditional

Kafka consumer configuration

Environment VariableDescriptionDefault Value
KAFKA_CONSUMER_GROUP_ID_APPLICATION_RESOURCE_EXPORTApplication export consumer groupappResourceExportGroup
KAFKA_CONSUMER_GROUP_ID_APPLICATION_RESOURCE_IMPORTApplication import consumer groupappResourceImportGroup
KAFKA_CONSUMER_GROUP_ID_BUILD_CREATEBuild create consumer groupbuildCreateGroup
KAFKA_CONSUMER_GROUP_ID_BUILD_UPDATEBuild update consumer groupbuildUpdateGroup
KAFKA_CONSUMER_GROUP_ID_BUILD_RESOURCE_EXPORTBuild export consumer groupbuildResourceExportGroup
KAFKA_CONSUMER_GROUP_ID_BUILD_RESOURCE_IMPORTBuild import consumer groupbuildResourceImportGroup
KAFKA_CONSUMER_GROUP_ID_PROCESS_STARTProcess start consumer groupprocessStartGroup
KAFKA_CONSUMER_GROUP_ID_APPLICATION_MERGEApplication merge consumer groupappMergeItemGroup

Kafka topic configuration

Application resource topics
Environment VariableDescriptionDefault Pattern
KAFKA_TOPIC_APPLICATION_RESOURCE_EXPORTApplication resource export topicai.flowx.dev.application-version.export.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_IMPORTApplication resource import topicai.flowx.dev.application-version.import.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_USAGES_INResource usages in topicai.flowx.dev.application-version.resources-usages.operations.bulk.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_USAGES_OUTResource usages out topicai.flowx.dev.application-version.resources-usages.operations.bulk.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_USAGES_REFRESHResource usages refresh topicai.flowx.dev.application-version.resources-usages.refresh.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_RESELEMUSAGEVALIDATION_RESPONSEResource element usage validation responseai.flowx.dev.application-version.resources-usages.sub-res-validation.response.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_RESELEMUSAGEVALIDATION_OUT_INTEGRATIONResource validation integration topicai.flowx.dev.application-version.resources-usages.sub-res-validation.request-integration.v1
KAFKA_TOPIC_APPLICATION_RESOURCE_COPYResource copy topicai.flowx.dev.application-version.copy-resource.v1
KAFKA_TOPIC_MERGEApplication merge topicai.flowx.dev.application-version.merge.v1
Build resource topics
Environment VariableDescriptionDefault Pattern
KAFKA_TOPIC_BUILD_RESOURCE_EXPORTBuild export topicai.flowx.dev.build.export.v1
KAFKA_TOPIC_BUILD_RESOURCE_IMPORTBuild import topicai.flowx.dev.build.import.v1
KAFKA_TOPIC_BUILD_RESOURCE_CREATEBuild create topicai.flowx.dev.build.create.v1
KAFKA_TOPIC_BUILD_RESOURCE_UPDATEBuild update topicai.flowx.dev.build.update.v1
KAFKA_TOPIC_START_TIMER_EVENTS_UPDATESTimer events updates topicai.flowx.dev.build.start-timer-events.updates.in.v1
Process topics
Environment VariableDescriptionDefault Pattern
KAFKA_TOPIC_PROCESS_START_FOR_EVENTProcess start for event topicai.flowx.dev.core.trigger.start-for-event.process.v1
KAFKA_TOPIC_PROCESS_START_BY_NAMEProcess start by name topicai.flowx.dev.core.trigger.start-by-name.process.v1
KAFKA_TOPIC_PROCESS_START_BY_NAME_OUTProcess start by name out topicai.flowx.dev.core.trigger.start-by-name.process.out.v1
KAFKA_TOPIC_PROCESS_SCHEDULED_TIMER_EVENTS_SETSet timer schedule topicai.flowx.dev.core.trigger.set.timer-event-schedule.v1
KAFKA_TOPIC_PROCESS_SCHEDULED_TIMER_EVENTS_STOPStop timer schedule topicai.flowx.dev.core.trigger.stop.timer-event-schedule.v1
Other topics
Environment VariableDescriptionDefault Pattern
KAFKA_TOPIC_AUDIT_OUTPUTAudit topicai.flowx.dev.core.trigger.save.audit.v1
KAFKA_TOPIC_EVENTS_GATEWAY_OUT_MESSAGEEvents gateway messages topicai.flowx.dev.eventsgateway.receive.copyresource.v1

Authentication configuration

Environment VariableDescriptionExample Value
SECURITY_OAUTH2_BASE_SERVER_URLOAuth2 server base URLhttps://auth-pr1180.dev3.flowxai.dev/auth
SECURITY_OAUTH2_CLIENT_CLIENT_IDClient IDflowx-platform-authorize
SECURITY_OAUTH2_CLIENT_CLIENT_SECRETClient secretsecret
SECURITY_OAUTH2_REALMAuthentication realmflowx
SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_SECRETAdmin service account secretsecret
SECURITY_OAUTH2_SERVICE_ACCOUNT_ADMIN_CLIENT_IDAdmin service account IDflowx-runtime-manager-sa

File storage configuration

Environment VariableDescriptionExample ValueDefault
APPLICATION_FILE_STORAGE_S3_SERVER_URLS3 server URLhttp://minio:9000None
APPLICATION_FILE_STORAGE_S3_ACCESS_KEYS3 access keyHa0wvtOE9gQ2NSzghEcsNone
APPLICATION_FILE_STORAGE_S3_SECRET_KEYS3 secret keyjY7nYLVtNh9JzMflliQKu3noPpjxD3prxIkliErXNone
APPLICATION_FILE_STORAGE_TYPEStorage types3s3
APPLICATION_FILE_STORAGE_DELETION_STRATEGYFile deletion strategydeletedelete
APPLICATION_FILE_STORAGE_S3_ENABLEDEnable S3 storagetruetrue
APPLICATION_FILE_STORAGE_S3_ENCRYPTION_ENABLEDEnable S3 encryptionfalsefalse
APPLICATION_FILE_STORAGE_S3_BUCKET_PREFIXS3 bucket name prefixapplications-bucketapplications-bucket

Monitoring and health check configuration

Environment VariableDescriptionExample ValueDefault
MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLEDPrometheus metricstruefalse
MANAGEMENT_HEALTH_KUBERNETES_ENABLEDKubernetes health checkfalsetrue
MANAGEMENT_HEALTH_REDIS_ENABLEDRedis health checkfalsetrue
MANAGEMENT_HEALTH_KAFKA_ENABLEDKafka health checktruetrue
MANAGEMENT_HEALTH_LIVENESSSTATE_ENABLEDLiveness statetruefalse
MANAGEMENT_HEALTH_READINESSSTATE_ENABLEDReadiness statetruefalse
MANAGEMENT_ENDPOINT_HEALTH_GROUP_LIVENESS_INCLUDELiveness probesping,diskSpace,accessInfo,buildInfo,db,mongo,kafkaClusterHealthCheckIndicatorping
MANAGEMENT_ENDPOINT_HEALTH_GROUP_READINESS_INCLUDEReadiness probesping,diskSpace,accessInfo,buildInfoping

Resource proxy configuration

Environment VariableDescriptionExample ValueDefault
RESOURCE_PROXY_MANIFEST_URLManifest URL for resource proxyURL valueNone
RESOURCE_PROXY_TARGET_URLTarget URL for resource forwardingURL valueNone
FLOWX_RESOURCE_PROXY_RETRY_GET_RESOURCE_TIMEOUT_MSResource retrieval timeout500500
FLOWX_RESOURCE_PROXY_RETRY_GET_RESOURCE_MAX_COUNTMaximum resource retrieval retries1010
FLOWX_RESOURCE_PROXY_WEB_CLIENT_RETRY_ATTEMPTSWeb client retry attempts22
FLOWX_RESOURCE_PROXY_WEB_CLIENT_RETRY_BACKOFFRetry backoff time (seconds)11
FLOWX_RESOURCE_PROXY_WEB_CLIENT_MAX_IN_MEMORY_SIZEMaximum in-memory size5MB5MB
FLOWX_RUNTIMEEXECUTIONPROXY_WEBCLIENT_MAXINMEMORYSIZEMaximum REST request size5242880 (5 MB)5242880

Scheduler configuration

Environment VariableDescriptionExample ValueDefault
FLOWX_SCHEDULER_RETRY_FAILED_DEPLOYMENTS_CRONFailed deployment retry cron0 * * * * *None
FLOWX_SCHEDULER_MASTER_ELECTION_ENABLEDEnable master electiontruefalse
FLOWX_SCHEDULER_MASTER_ELECTION_CRON_EXPRESSIONMaster election cron*/30 * * * * *None
FLOWX_SCHEDULER_MASTER_ELECTION_PROVIDERElection providerredisNone

Kafka topic naming convention

The Application Manager uses a structured topic naming convention with the following components:

ComponentDefault ValueEnvironment VariableDescription
packageai.flowx.KAFKA_TOPIC_NAMING_PACKAGEBase package identifier
environmentdev.KAFKA_TOPIC_NAMING_ENVIRONMENTDeployment environment
version.v1KAFKA_TOPIC_NAMING_VERSIONTopic version
separator.KAFKA_TOPIC_NAMING_SEPARATORMain separator
separator2-KAFKA_TOPIC_NAMING_SEPARATOR2Secondary separator

The topics follow a pattern like:

ai.flowx.{environment}.{service}.{action}.{detail}.v1

Ingress configuration

Configure ingress to control external access to Application Manager:

ingress:
  enabled: true
  public:
    enabled: false
  admin:
    enabled: true
    hostname: "{{ .Values.flowx.ingress.admin }}"
    path: /appmanager(/|$)(.*)
    annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /$2
      nginx.ingress.kubernetes.io/cors-allow-headers: DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,flowx-platform