Job Queue is a core Keboola Service, which provides an interface for running Keboola components. Every component in Keboola is represented by a Docker image. Running a component means creating and executing an asynchronous job.
Developing functionality in Docker allows you to focus only on the application logic; all communication with the Storage API will be handled by Job Queue. You can encapsulate any application into a Docker image following a set of rules that will allow you to integrate the application into Keboola.
There is a predefined interface with Job Queue, consisting mainly of a folder structure and a serialized configuration file. All components, including our internal R and Python Transformations, are run using Job Queue.
The Job Queue functionality can be described in the following steps:
When the component execution is finished, Job Queue automatically collects the exit code and the content of STDOUT and STDERR. The following schema illustrates the workflow of running a dockerized component.
The component is responsible for these processes:
Job Queue is responsible for the following processes:
The Job Queue API has API calls to
Components executed by Job Queue store their configurations in Storage API components configurations.
When creating the configuration, use this JSON schema to validate the configuration before storing it. The configuration contains the following nodes, all of them are optional:
parameters — an arbitrary object passed to the dockerized application itselfstorage — configuration of input and output mapping; specific options correspond to the options of the
unload data and
load data API calls.runtime — runtime settings (tag, backend, parallelism); most notably runtime.tag
pins the Docker image tag that jobs of this configuration run, which is the usual way of testing a development build of a componentprocessors — configuration of Processorsauthorization — OAuth authorization injected to the configuration; not stored in the component configurationimage_parameters — an arbitrary object passed from the component; not stored in the component configurationaction — an action being executed; not stored in the component configuration