diff --git a/dev/404.html b/dev/404.html index f24ec2f37..f546dabec 100644 --- a/dev/404.html +++ b/dev/404.html @@ -689,6 +689,8 @@ + + @@ -787,6 +789,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/developer/auto-generation/index.html b/dev/developer/auto-generation/index.html index 33accaa36..233c6f6f7 100644 --- a/dev/developer/auto-generation/index.html +++ b/dev/developer/auto-generation/index.html @@ -711,6 +711,8 @@ + + @@ -809,6 +811,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/developer/contributing/index.html b/dev/developer/contributing/index.html index e3cb05321..c12022ceb 100644 --- a/dev/developer/contributing/index.html +++ b/dev/developer/contributing/index.html @@ -713,6 +713,8 @@ + + @@ -811,6 +813,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/developer/getting-started/index.html b/dev/developer/getting-started/index.html index 9ab292224..d3a482920 100644 --- a/dev/developer/getting-started/index.html +++ b/dev/developer/getting-started/index.html @@ -713,6 +713,8 @@ + + @@ -811,6 +813,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/index.html b/dev/index.html index c92cfd4b3..05ac93e69 100644 --- a/dev/index.html +++ b/dev/index.html @@ -767,6 +767,8 @@

    KPOps Documentation

    + + @@ -865,6 +867,26 @@

    KPOps Documentation

    +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/resources/architecture/components-hierarchy/index.html b/dev/resources/architecture/components-hierarchy/index.html index 0c1825c69..11849d728 100644 --- a/dev/resources/architecture/components-hierarchy/index.html +++ b/dev/resources/architecture/components-hierarchy/index.html @@ -702,6 +702,8 @@ + + @@ -800,6 +802,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • @@ -1526,10 +1548,13 @@

    Components hierarchy

    flowchart BT
         KubernetesApp --> PipelineComponent
    +    KafkaApp --> PipelineComponent
         HelmApp --> KubernetesApp
    -    KafkaApp --> HelmApp
    +    StreamsBootstrap --> HelmApp
         StreamsApp --> KafkaApp
    +    StreamsApp --> StreamsBootstrap
         ProducerApp --> KafkaApp
    +    ProducerApp --> StreamsBootstrap
         KafkaConnector --> PipelineComponent
         KafkaSourceConnector --> KafkaConnector
         KafkaSinkConnector --> KafkaConnector
    @@ -1537,6 +1562,7 @@ 

    Components hierarchy

    click KubernetesApp "/kpops/user/core-concepts/components/kubernetes-app" click HelmApp "/kpops/user/core-concepts/components/helm-app" click KafkaApp "/kpops/user/core-concepts/components/kafka-app" + click StreamsBootstrap "/kpops/user/core-concepts/components/streams-bootstrap" click StreamsApp "/kpops/user/core-concepts/components/streams-app" click ProducerApp "/kpops/user/core-concepts/components/producer-app" click KafkaConnector "/kpops/user/core-concepts/components/kafka-connector" diff --git a/dev/resources/examples/defaults/index.html b/dev/resources/examples/defaults/index.html index 233f6a190..5811c14d6 100644 --- a/dev/resources/examples/defaults/index.html +++ b/dev/resources/examples/defaults/index.html @@ -707,6 +707,8 @@ + + @@ -805,6 +807,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/resources/examples/pipeline/index.html b/dev/resources/examples/pipeline/index.html index fb2653fc5..bc7bb7609 100644 --- a/dev/resources/examples/pipeline/index.html +++ b/dev/resources/examples/pipeline/index.html @@ -707,6 +707,8 @@ + + @@ -805,6 +807,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/resources/pipeline-components/dependencies/defaults_pipeline_component_dependencies.yaml b/dev/resources/pipeline-components/dependencies/defaults_pipeline_component_dependencies.yaml index 4e12885af..959596df0 100644 --- a/dev/resources/pipeline-components/dependencies/defaults_pipeline_component_dependencies.yaml +++ b/dev/resources/pipeline-components/dependencies/defaults_pipeline_component_dependencies.yaml @@ -2,8 +2,10 @@ helm-app.yaml: - app-helm-app.yaml - repo_config-helm-app.yaml kafka-app.yaml: +- prefix.yaml +- from_.yaml +- to.yaml - app-kafka-app.yaml -- version-kafka-app.yaml kafka-connector.yaml: - prefix.yaml - from_.yaml diff --git a/dev/resources/pipeline-components/dependencies/kpops_structure.yaml b/dev/resources/pipeline-components/dependencies/kpops_structure.yaml index 784d9ccc4..52192cb22 100644 --- a/dev/resources/pipeline-components/dependencies/kpops_structure.yaml +++ b/dev/resources/pipeline-components/dependencies/kpops_structure.yaml @@ -13,10 +13,7 @@ kpops_components_fields: - prefix - from_ - to - - namespace - app - - repo_config - - version kafka-connector: - name - prefix @@ -78,6 +75,15 @@ kpops_components_fields: - app - repo_config - version + streams-bootstrap: + - name + - prefix + - from_ + - to + - namespace + - app + - repo_config + - version kpops_components_inheritance_ref: helm-app: bases: @@ -87,10 +93,8 @@ kpops_components_inheritance_ref: - pipeline-component kafka-app: bases: - - helm-app + - pipeline-component parents: - - helm-app - - kubernetes-app - pipeline-component kafka-connector: bases: @@ -120,16 +124,27 @@ kpops_components_inheritance_ref: producer-app: bases: - kafka-app + - streams-bootstrap parents: - kafka-app + - streams-bootstrap - helm-app - kubernetes-app - pipeline-component streams-app: bases: - kafka-app + - streams-bootstrap parents: - kafka-app + - streams-bootstrap + - helm-app + - kubernetes-app + - pipeline-component + streams-bootstrap: + bases: + - helm-app + parents: - helm-app - kubernetes-app - pipeline-component diff --git a/dev/resources/pipeline-components/dependencies/pipeline_component_dependencies.yaml b/dev/resources/pipeline-components/dependencies/pipeline_component_dependencies.yaml index 8504a0135..b633db907 100644 --- a/dev/resources/pipeline-components/dependencies/pipeline_component_dependencies.yaml +++ b/dev/resources/pipeline-components/dependencies/pipeline_component_dependencies.yaml @@ -10,10 +10,7 @@ kafka-app.yaml: - prefix.yaml - from_.yaml - to.yaml -- namespace.yaml - app-kafka-app.yaml -- repo_config-helm-app.yaml -- version-kafka-app.yaml kafka-connector.yaml: - prefix.yaml - from_.yaml diff --git a/dev/resources/pipeline-components/kafka-app.yaml b/dev/resources/pipeline-components/kafka-app.yaml index 83a67b4cf..60fbbfb13 100644 --- a/dev/resources/pipeline-components/kafka-app.yaml +++ b/dev/resources/pipeline-components/kafka-app.yaml @@ -44,7 +44,6 @@ cleanup.policy: compact models: # SchemaProvider is initiated with the values given here model: model - namespace: namespace # required # `app` can contain application-specific settings, hence the user is free to # add the key-value pairs they need. app: # required @@ -53,14 +52,3 @@ schemaRegistryUrl: ${config.schema_registry.url} nameOverride: override-with-this-name # kafka-app-specific imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app - # Helm repository configuration (optional) - # If not set the helm repo add will not be called. Useful when using local Helm charts - repo_config: - repository_name: bakdata-streams-bootstrap # required - url: https://bakdata.github.io/streams-bootstrap/ # required - repo_auth_flags: - username: user - password: pass - ca_file: /home/user/path/to/ca-file - insecure_skip_tls_verify: false - version: "2.12.0" # Helm chart version diff --git a/dev/resources/pipeline-components/pipeline.yaml b/dev/resources/pipeline-components/pipeline.yaml index cdbd18d96..12183b8e6 100644 --- a/dev/resources/pipeline-components/pipeline.yaml +++ b/dev/resources/pipeline-components/pipeline.yaml @@ -107,7 +107,6 @@ cleanup.policy: compact models: # SchemaProvider is initiated with the values given here model: model - namespace: namespace # required # `app` can contain application-specific settings, hence the user is free to # add the key-value pairs they need. app: # required @@ -116,17 +115,6 @@ schemaRegistryUrl: ${config.schema_registry.url} nameOverride: override-with-this-name # kafka-app-specific imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app - # Helm repository configuration (optional) - # If not set the helm repo add will not be called. Useful when using local Helm charts - repo_config: - repository_name: bakdata-streams-bootstrap # required - url: https://bakdata.github.io/streams-bootstrap/ # required - repo_auth_flags: - username: user - password: pass - ca_file: /home/user/path/to/ca-file - insecure_skip_tls_verify: false - version: "2.12.0" # Helm chart version # Kafka sink connector - type: kafka-sink-connector name: kafka-sink-connector # required diff --git a/dev/resources/pipeline-components/pipeline/index.html b/dev/resources/pipeline-components/pipeline/index.html index 0599fe571..8f15bb3f4 100644 --- a/dev/resources/pipeline-components/pipeline/index.html +++ b/dev/resources/pipeline-components/pipeline/index.html @@ -707,6 +707,8 @@ + + @@ -805,6 +807,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • @@ -1979,19 +2001,7 @@

    pipeline.yaml446 447 448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461

  • # Kubernetes app managed through Helm with an associated Helm chart
    +449
    # Kubernetes app managed through Helm with an associated Helm chart
     - type: helm-app
       name: helm-app # required
       # Pipeline prefix that will prefix every component name. If you wish to not
    @@ -2100,358 +2110,346 @@ 

    pipeline.yaml cleanup.policy: compact models: # SchemaProvider is initiated with the values given here model: model - namespace: namespace # required - # `app` can contain application-specific settings, hence the user is free to - # add the key-value pairs they need. - app: # required - streams: # required - brokers: ${config.kafka_brokers} # required - schemaRegistryUrl: ${config.schema_registry.url} - nameOverride: override-with-this-name # kafka-app-specific - imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app - # Helm repository configuration (optional) - # If not set the helm repo add will not be called. Useful when using local Helm charts - repo_config: - repository_name: bakdata-streams-bootstrap # required - url: https://bakdata.github.io/streams-bootstrap/ # required - repo_auth_flags: - username: user - password: pass - ca_file: /home/user/path/to/ca-file - insecure_skip_tls_verify: false - version: "2.12.0" # Helm chart version -# Kafka sink connector -- type: kafka-sink-connector - name: kafka-sink-connector # required - # Pipeline prefix that will prefix every component name. If you wish to not - # have any prefix you can specify an empty string. - prefix: ${pipeline.name}- - from: # Must not be null - topics: # read from topic - ${pipeline.name}-input-topic: - type: input # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra - ${pipeline.name}-input-pattern-topic: - type: pattern # Implied to be an input pattern if `role` is undefined - ${pipeline.name}-extra-pattern-topic: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - components: # read from specific component - account-producer: + # `app` can contain application-specific settings, hence the user is free to + # add the key-value pairs they need. + app: # required + streams: # required + brokers: ${config.kafka_brokers} # required + schemaRegistryUrl: ${config.schema_registry.url} + nameOverride: override-with-this-name # kafka-app-specific + imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app +# Kafka sink connector +- type: kafka-sink-connector + name: kafka-sink-connector # required + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + from: # Must not be null + topics: # read from topic + ${pipeline.name}-input-topic: + type: input # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra + ${pipeline.name}-input-pattern-topic: + type: pattern # Implied to be an input pattern if `role` is undefined + ${pipeline.name}-extra-pattern-topic: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + components: # read from specific component + account-producer: + type: output # Implied when role is NOT specified + other-producer: + role: some-role # Implies `type` to be extra + component-as-input-pattern: + type: pattern # Implied to be an input pattern if `role` is undefined + component-as-extra-pattern: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: type: output # Implied when role is NOT specified - other-producer: - role: some-role # Implies `type` to be extra - component-as-input-pattern: - type: pattern # Implied to be an input pattern if `role` is undefined - component-as-extra-pattern: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - # Topic(s) into which the component will write output - to: - topics: - ${pipeline.name}-output-topic: - type: output # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined - ${pipeline.name}-error-topic: - type: error - # Currently KPOps supports Avro and JSON schemas. - key_schema: key-schema # must implement SchemaProvider to use - value_schema: value-schema - partitions_count: 1 - replication_factor: 1 - configs: # https://kafka.apache.org/documentation/#topicconfigs - cleanup.policy: compact - models: # SchemaProvider is initiated with the values given here - model: model - namespace: namespace # required - # `app` contains application-specific settings, hence it does not have a rigid - # structure. The fields below are just an example. Extensive documentation on - # connectors: https://kafka.apache.org/documentation/#connectconfigs - app: # required - tasks.max: 1 - # Helm repository configuration for resetter - repo_config: - repository_name: my-repo # required - url: https://bakdata.github.io/kafka-connect-resetter/ # required - repo_auth_flags: - username: user - password: pass - ca_file: /home/user/path/to/ca-file - insecure_skip_tls_verify: false - version: "1.0.6" # Helm chart version - # Overriding Kafka Connect Resetter Helm values. E.g. to override the - # Image Tag etc. - resetter_values: - imageTag: "1.2.3" -# Kafka source connector -- type: kafka-source-connector # required - name: kafka-source-connector # required - # Pipeline prefix that will prefix every component name. If you wish to not - # have any prefix you can specify an empty string. - prefix: ${pipeline.name}- - # The source connector has no `from` section - # from: - # Topic(s) into which the component will write output - to: - topics: - ${pipeline.name}-output-topic: - type: output # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined - ${pipeline.name}-error-topic: - type: error - # Currently KPOps supports Avro and JSON schemas. - key_schema: key-schema # must implement SchemaProvider to use - value_schema: value-schema - partitions_count: 1 - replication_factor: 1 - configs: # https://kafka.apache.org/documentation/#topicconfigs - cleanup.policy: compact - models: # SchemaProvider is initiated with the values given here - model: model - namespace: namespace # required - # `app` contains application-specific settings, hence it does not have a rigid - # structure. The fields below are just an example. Extensive documentation on - # connectors: https://kafka.apache.org/documentation/#connectconfigs - app: # required - tasks.max: 1 - # Helm repository configuration for resetter - repo_config: - repository_name: my-repo # required - url: https://bakdata.github.io/kafka-connect-resetter/ # required - repo_auth_flags: - username: user - password: pass - ca_file: /home/user/path/to/ca-file - insecure_skip_tls_verify: false - version: "1.0.6" # Helm chart version - # Overriding Kafka Connect Resetter Helm values. E.g. to override the - # Image Tag etc. - resetter_values: - imageTag: "1.2.3" - # offset.storage.topic - # https://kafka.apache.org/documentation/#connect_running - offset_topic: offset_topic -# Base Kubernetes App -- type: kubernetes-app - name: kubernetes-app # required - # Pipeline prefix that will prefix every component name. If you wish to not - # have any prefix you can specify an empty string. - prefix: ${pipeline.name}- - from: # Must not be null - topics: # read from topic - ${pipeline.name}-input-topic: - type: input # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra - ${pipeline.name}-input-pattern-topic: - type: pattern # Implied to be an input pattern if `role` is undefined - ${pipeline.name}-extra-pattern-topic: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - components: # read from specific component - account-producer: + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model + namespace: namespace # required + # `app` contains application-specific settings, hence it does not have a rigid + # structure. The fields below are just an example. Extensive documentation on + # connectors: https://kafka.apache.org/documentation/#connectconfigs + app: # required + tasks.max: 1 + # Helm repository configuration for resetter + repo_config: + repository_name: my-repo # required + url: https://bakdata.github.io/kafka-connect-resetter/ # required + repo_auth_flags: + username: user + password: pass + ca_file: /home/user/path/to/ca-file + insecure_skip_tls_verify: false + version: "1.0.6" # Helm chart version + # Overriding Kafka Connect Resetter Helm values. E.g. to override the + # Image Tag etc. + resetter_values: + imageTag: "1.2.3" +# Kafka source connector +- type: kafka-source-connector # required + name: kafka-source-connector # required + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + # The source connector has no `from` section + # from: + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: + type: output # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model + namespace: namespace # required + # `app` contains application-specific settings, hence it does not have a rigid + # structure. The fields below are just an example. Extensive documentation on + # connectors: https://kafka.apache.org/documentation/#connectconfigs + app: # required + tasks.max: 1 + # Helm repository configuration for resetter + repo_config: + repository_name: my-repo # required + url: https://bakdata.github.io/kafka-connect-resetter/ # required + repo_auth_flags: + username: user + password: pass + ca_file: /home/user/path/to/ca-file + insecure_skip_tls_verify: false + version: "1.0.6" # Helm chart version + # Overriding Kafka Connect Resetter Helm values. E.g. to override the + # Image Tag etc. + resetter_values: + imageTag: "1.2.3" + # offset.storage.topic + # https://kafka.apache.org/documentation/#connect_running + offset_topic: offset_topic +# Base Kubernetes App +- type: kubernetes-app + name: kubernetes-app # required + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + from: # Must not be null + topics: # read from topic + ${pipeline.name}-input-topic: + type: input # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra + ${pipeline.name}-input-pattern-topic: + type: pattern # Implied to be an input pattern if `role` is undefined + ${pipeline.name}-extra-pattern-topic: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + components: # read from specific component + account-producer: + type: output # Implied when role is NOT specified + other-producer: + role: some-role # Implies `type` to be extra + component-as-input-pattern: + type: pattern # Implied to be an input pattern if `role` is undefined + component-as-extra-pattern: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: type: output # Implied when role is NOT specified - other-producer: - role: some-role # Implies `type` to be extra - component-as-input-pattern: - type: pattern # Implied to be an input pattern if `role` is undefined - component-as-extra-pattern: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - # Topic(s) into which the component will write output - to: - topics: - ${pipeline.name}-output-topic: - type: output # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined - ${pipeline.name}-error-topic: - type: error - # Currently KPOps supports Avro and JSON schemas. - key_schema: key-schema # must implement SchemaProvider to use - value_schema: value-schema - partitions_count: 1 - replication_factor: 1 - configs: # https://kafka.apache.org/documentation/#topicconfigs - cleanup.policy: compact - models: # SchemaProvider is initiated with the values given here - model: model - namespace: namespace # required - # `app` contains application-specific settings, hence it does not have a rigid - # structure. The fields below are just an example. - app: # required - image: exampleImage # Example - debug: false # Example - commandLine: {} # Example -# Holds configuration to use as values for the streams bootstrap producer-app Helm -# chart. -# More documentation on ProducerApp: -# https://github.com/bakdata/streams-bootstrap -- type: producer-app - name: producer-app # required - # Pipeline prefix that will prefix every component name. If you wish to not - # have any prefix you can specify an empty string. - prefix: ${pipeline.name}- - # from: # While the producer-app does inherit from kafka-app, it does not need a - # `from` section, hence it does not support it. - # Topic(s) into which the component will write output - to: - topics: - ${pipeline.name}-output-topic: - type: output # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined - ${pipeline.name}-error-topic: - type: error - # Currently KPOps supports Avro and JSON schemas. - key_schema: key-schema # must implement SchemaProvider to use - value_schema: value-schema - partitions_count: 1 - replication_factor: 1 - configs: # https://kafka.apache.org/documentation/#topicconfigs - cleanup.policy: compact - models: # SchemaProvider is initiated with the values given here - model: model - namespace: namespace # required - # Allowed configs: - # https://github.com/bakdata/streams-bootstrap/tree/master/charts/producer-app - app: # required - streams: # required, producer-app-specific - brokers: ${config.kafka_brokers} # required - schemaRegistryUrl: ${config.schema_registry.url} - outputTopic: output_topic - extraOutputTopics: - output_role1: output_topic1 - output_role2: output_topic2 - nameOverride: override-with-this-name # kafka-app-specific - # Helm repository configuration (optional) - # If not set the helm repo add will not be called. Useful when using local Helm charts - repo_config: - repository_name: bakdata-streams-bootstrap # required - url: https://bakdata.github.io/streams-bootstrap/ # required - repo_auth_flags: - username: user - password: pass - ca_file: /home/user/path/to/ca-file - insecure_skip_tls_verify: false - version: "2.12.0" # Helm chart version -# StreamsApp component that configures a streams bootstrap app. -# More documentation on StreamsApp: https://github.com/bakdata/streams-bootstrap -- type: streams-app # required - name: streams-app # required - # Pipeline prefix that will prefix every component name. If you wish to not - # have any prefix you can specify an empty string. - prefix: ${pipeline.name}- - from: # Must not be null - topics: # read from topic - ${pipeline.name}-input-topic: - type: input # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra - ${pipeline.name}-input-pattern-topic: - type: pattern # Implied to be an input pattern if `role` is undefined - ${pipeline.name}-extra-pattern-topic: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - components: # read from specific component - account-producer: + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model + namespace: namespace # required + # `app` contains application-specific settings, hence it does not have a rigid + # structure. The fields below are just an example. + app: # required + image: exampleImage # Example + debug: false # Example + commandLine: {} # Example +# Holds configuration to use as values for the streams bootstrap producer-app Helm +# chart. +# More documentation on ProducerApp: +# https://github.com/bakdata/streams-bootstrap +- type: producer-app + name: producer-app # required + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + # from: # While the producer-app does inherit from kafka-app, it does not need a + # `from` section, hence it does not support it. + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: + type: output # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model + namespace: namespace # required + # Allowed configs: + # https://github.com/bakdata/streams-bootstrap/tree/master/charts/producer-app + app: # required + streams: # required, producer-app-specific + brokers: ${config.kafka_brokers} # required + schemaRegistryUrl: ${config.schema_registry.url} + outputTopic: output_topic + extraOutputTopics: + output_role1: output_topic1 + output_role2: output_topic2 + nameOverride: override-with-this-name # kafka-app-specific + # Helm repository configuration (optional) + # If not set the helm repo add will not be called. Useful when using local Helm charts + repo_config: + repository_name: bakdata-streams-bootstrap # required + url: https://bakdata.github.io/streams-bootstrap/ # required + repo_auth_flags: + username: user + password: pass + ca_file: /home/user/path/to/ca-file + insecure_skip_tls_verify: false + version: "2.12.0" # Helm chart version +# StreamsApp component that configures a streams bootstrap app. +# More documentation on StreamsApp: https://github.com/bakdata/streams-bootstrap +- type: streams-app # required + name: streams-app # required + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + from: # Must not be null + topics: # read from topic + ${pipeline.name}-input-topic: + type: input # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra + ${pipeline.name}-input-pattern-topic: + type: pattern # Implied to be an input pattern if `role` is undefined + ${pipeline.name}-extra-pattern-topic: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + components: # read from specific component + account-producer: + type: output # Implied when role is NOT specified + other-producer: + role: some-role # Implies `type` to be extra + component-as-input-pattern: + type: pattern # Implied to be an input pattern if `role` is undefined + component-as-extra-pattern: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: type: output # Implied when role is NOT specified - other-producer: - role: some-role # Implies `type` to be extra - component-as-input-pattern: - type: pattern # Implied to be an input pattern if `role` is undefined - component-as-extra-pattern: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - # Topic(s) into which the component will write output - to: - topics: - ${pipeline.name}-output-topic: - type: output # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined - ${pipeline.name}-error-topic: - type: error - # Currently KPOps supports Avro and JSON schemas. - key_schema: key-schema # must implement SchemaProvider to use - value_schema: value-schema - partitions_count: 1 - replication_factor: 1 - configs: # https://kafka.apache.org/documentation/#topicconfigs - cleanup.policy: compact - models: # SchemaProvider is initiated with the values given here - model: model - namespace: namespace # required - # No arbitrary keys are allowed under `app`here - # Allowed configs: - # https://github.com/bakdata/streams-bootstrap/tree/master/charts/streams-app - app: # required - # Streams Bootstrap streams section - streams: # required, streams-app-specific - brokers: ${config.kafka_brokers} # required - schemaRegistryUrl: ${config.schema_registry.url} - inputTopics: - - topic1 - - topic2 - outputTopic: output-topic - inputPattern: input-pattern - extraInputTopics: - input_role1: - - input_topic1 - - input_topic2 - input_role2: - - input_topic3 - - input_topic4 - extraInputPatterns: - pattern_role1: input_pattern1 - extraOutputTopics: - output_role1: output_topic1 - output_role2: output_topic2 - errorTopic: error-topic - config: - my.streams.config: my.value - nameOverride: override-with-this-name # streams-app-specific - autoscaling: # streams-app-specific - consumerGroup: consumer-group # required - lagThreshold: 0 # Average target value to trigger scaling actions. - enabled: false # Whether to enable auto-scaling using KEDA. - # This is the interval to check each trigger on. - # https://keda.sh/docs/2.9/concepts/scaling-deployments/#pollinginterval - pollingInterval: 30 - # The period to wait after the last trigger reported active before scaling - # the resource back to 0. https://keda.sh/docs/2.9/concepts/scaling-deployments/#cooldownperiod - cooldownPeriod: 300 - # The offset reset policy for the consumer if the the consumer group is - # not yet subscribed to a partition. - offsetResetPolicy: earliest - # This setting is passed to the HPA definition that KEDA will create for a - # given resource and holds the maximum number of replicas of the target resouce. - # https://keda.sh/docs/2.9/concepts/scaling-deployments/#maxreplicacount - maxReplicas: 1 - # Minimum number of replicas KEDA will scale the resource down to. - # https://keda.sh/docs/2.7/concepts/scaling-deployments/#minreplicacount - minReplicas: 0 - # If this property is set, KEDA will scale the resource down to this - # number of replicas. - # https://keda.sh/docs/2.9/concepts/scaling-deployments/#idlereplicacount - idleReplicas: 0 - topics: # List of auto-generated Kafka Streams topics used by the streams app. - - topic1 - - topic2 - # Helm repository configuration (optional) - # If not set the helm repo add will not be called. Useful when using local Helm charts - repo_config: - repository_name: bakdata-streams-bootstrap # required - url: https://bakdata.github.io/streams-bootstrap/ # required - repo_auth_flags: - username: user - password: pass - ca_file: /home/user/path/to/ca-file - insecure_skip_tls_verify: false - version: "2.12.0" # Helm chart version + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model + namespace: namespace # required + # No arbitrary keys are allowed under `app`here + # Allowed configs: + # https://github.com/bakdata/streams-bootstrap/tree/master/charts/streams-app + app: # required + # Streams Bootstrap streams section + streams: # required, streams-app-specific + brokers: ${config.kafka_brokers} # required + schemaRegistryUrl: ${config.schema_registry.url} + inputTopics: + - topic1 + - topic2 + outputTopic: output-topic + inputPattern: input-pattern + extraInputTopics: + input_role1: + - input_topic1 + - input_topic2 + input_role2: + - input_topic3 + - input_topic4 + extraInputPatterns: + pattern_role1: input_pattern1 + extraOutputTopics: + output_role1: output_topic1 + output_role2: output_topic2 + errorTopic: error-topic + config: + my.streams.config: my.value + nameOverride: override-with-this-name # streams-app-specific + autoscaling: # streams-app-specific + consumerGroup: consumer-group # required + lagThreshold: 0 # Average target value to trigger scaling actions. + enabled: false # Whether to enable auto-scaling using KEDA. + # This is the interval to check each trigger on. + # https://keda.sh/docs/2.9/concepts/scaling-deployments/#pollinginterval + pollingInterval: 30 + # The period to wait after the last trigger reported active before scaling + # the resource back to 0. https://keda.sh/docs/2.9/concepts/scaling-deployments/#cooldownperiod + cooldownPeriod: 300 + # The offset reset policy for the consumer if the the consumer group is + # not yet subscribed to a partition. + offsetResetPolicy: earliest + # This setting is passed to the HPA definition that KEDA will create for a + # given resource and holds the maximum number of replicas of the target resouce. + # https://keda.sh/docs/2.9/concepts/scaling-deployments/#maxreplicacount + maxReplicas: 1 + # Minimum number of replicas KEDA will scale the resource down to. + # https://keda.sh/docs/2.7/concepts/scaling-deployments/#minreplicacount + minReplicas: 0 + # If this property is set, KEDA will scale the resource down to this + # number of replicas. + # https://keda.sh/docs/2.9/concepts/scaling-deployments/#idlereplicacount + idleReplicas: 0 + topics: # List of auto-generated Kafka Streams topics used by the streams app. + - topic1 + - topic2 + # Helm repository configuration (optional) + # If not set the helm repo add will not be called. Useful when using local Helm charts + repo_config: + repository_name: bakdata-streams-bootstrap # required + url: https://bakdata.github.io/streams-bootstrap/ # required + repo_auth_flags: + username: user + password: pass + ca_file: /home/user/path/to/ca-file + insecure_skip_tls_verify: false + version: "2.12.0" # Helm chart version

    diff --git a/dev/resources/pipeline-defaults/defaults-kafka-app.yaml b/dev/resources/pipeline-defaults/defaults-kafka-app.yaml index 7320042af..a27bb38d1 100644 --- a/dev/resources/pipeline-defaults/defaults-kafka-app.yaml +++ b/dev/resources/pipeline-defaults/defaults-kafka-app.yaml @@ -3,6 +3,48 @@ # Parent of: ProducerApp, StreamsApp # Child of: KubernetesApp kafka-app: + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + from: # Must not be null + topics: # read from topic + ${pipeline.name}-input-topic: + type: input # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra + ${pipeline.name}-input-pattern-topic: + type: pattern # Implied to be an input pattern if `role` is undefined + ${pipeline.name}-extra-pattern-topic: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + components: # read from specific component + account-producer: + type: output # Implied when role is NOT specified + other-producer: + role: some-role # Implies `type` to be extra + component-as-input-pattern: + type: pattern # Implied to be an input pattern if `role` is undefined + component-as-extra-pattern: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: + type: output # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model # `app` can contain application-specific settings, hence the user is free to # add the key-value pairs they need. app: # required @@ -11,4 +53,3 @@ kafka-app: schemaRegistryUrl: ${config.schema_registry.url} nameOverride: override-with-this-name # kafka-app-specific imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app - version: "2.12.0" # Helm chart version diff --git a/dev/resources/pipeline-defaults/defaults.yaml b/dev/resources/pipeline-defaults/defaults.yaml index 3c1550af3..05487c7c0 100644 --- a/dev/resources/pipeline-defaults/defaults.yaml +++ b/dev/resources/pipeline-defaults/defaults.yaml @@ -24,6 +24,48 @@ helm-app: # Parent of: ProducerApp, StreamsApp # Child of: KubernetesApp kafka-app: + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + from: # Must not be null + topics: # read from topic + ${pipeline.name}-input-topic: + type: input # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra + ${pipeline.name}-input-pattern-topic: + type: pattern # Implied to be an input pattern if `role` is undefined + ${pipeline.name}-extra-pattern-topic: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + components: # read from specific component + account-producer: + type: output # Implied when role is NOT specified + other-producer: + role: some-role # Implies `type` to be extra + component-as-input-pattern: + type: pattern # Implied to be an input pattern if `role` is undefined + component-as-extra-pattern: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: + type: output # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model # `app` can contain application-specific settings, hence the user is free to # add the key-value pairs they need. app: # required @@ -32,7 +74,6 @@ kafka-app: schemaRegistryUrl: ${config.schema_registry.url} nameOverride: override-with-this-name # kafka-app-specific imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app - version: "2.12.0" # Helm chart version # Kafka connector # # Parent of: KafkaSinkConnector, KafkaSourceConnector diff --git a/dev/resources/pipeline-defaults/defaults/index.html b/dev/resources/pipeline-defaults/defaults/index.html index 26887a84b..6c82f8042 100644 --- a/dev/resources/pipeline-defaults/defaults/index.html +++ b/dev/resources/pipeline-defaults/defaults/index.html @@ -707,6 +707,8 @@ + + @@ -805,6 +807,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • @@ -1780,7 +1802,48 @@

    defaults.yaml247 248 249 -250
    # Kubernetes app managed through Helm with an associated Helm chart
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    # Kubernetes app managed through Helm with an associated Helm chart
     #
     # Parent of: KafkaApp
     # Child of: KubernetesApp
    @@ -1806,230 +1869,271 @@ 

    defaults.yaml# Parent of: ProducerApp, StreamsApp # Child of: KubernetesApp kafka-app: - # `app` can contain application-specific settings, hence the user is free to - # add the key-value pairs they need. - app: # required - streams: # required - brokers: ${config.kafka_brokers} # required - schemaRegistryUrl: ${config.schema_registry.url} - nameOverride: override-with-this-name # kafka-app-specific - imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app - version: "2.12.0" # Helm chart version -# Kafka connector -# -# Parent of: KafkaSinkConnector, KafkaSourceConnector -# Child of: PipelineComponent -kafka-connector: - # Pipeline prefix that will prefix every component name. If you wish to not - # have any prefix you can specify an empty string. - prefix: ${pipeline.name}- - from: # Must not be null - topics: # read from topic - ${pipeline.name}-input-topic: - type: input # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra - ${pipeline.name}-input-pattern-topic: - type: pattern # Implied to be an input pattern if `role` is undefined - ${pipeline.name}-extra-pattern-topic: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - components: # read from specific component - account-producer: - type: output # Implied when role is NOT specified - other-producer: - role: some-role # Implies `type` to be extra - component-as-input-pattern: - type: pattern # Implied to be an input pattern if `role` is undefined - component-as-extra-pattern: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - # Topic(s) into which the component will write output - to: - topics: - ${pipeline.name}-output-topic: - type: output # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined - ${pipeline.name}-error-topic: - type: error - # Currently KPOps supports Avro and JSON schemas. - key_schema: key-schema # must implement SchemaProvider to use - value_schema: value-schema - partitions_count: 1 - replication_factor: 1 - configs: # https://kafka.apache.org/documentation/#topicconfigs - cleanup.policy: compact - models: # SchemaProvider is initiated with the values given here - model: model - namespace: namespace # required - # `app` contains application-specific settings, hence it does not have a rigid - # structure. The fields below are just an example. Extensive documentation on - # connectors: https://kafka.apache.org/documentation/#connectconfigs - app: # required - tasks.max: 1 - # Helm repository configuration for resetter - repo_config: - repository_name: my-repo # required - url: https://bakdata.github.io/kafka-connect-resetter/ # required - repo_auth_flags: - username: user - password: pass - ca_file: /home/user/path/to/ca-file - insecure_skip_tls_verify: false - version: "1.0.6" # Helm chart version - # Overriding Kafka Connect Resetter Helm values. E.g. to override the - # Image Tag etc. - resetter_values: - imageTag: "1.2.3" -# Kafka sink connector -# -# Child of: KafkaConnector -kafka-sink-connector: - # No settings differ from `kafka-connector` -# Kafka source connector -# -# Child of: KafkaConnector -kafka-source-connector: - # The source connector has no `from` section - # from: - # offset.storage.topic - # https://kafka.apache.org/documentation/#connect_running - offset_topic: offset_topic -# Base Kubernetes App -# -# Parent of: HelmApp -# Child of: PipelineComponent -kubernetes-app: - # Pipeline prefix that will prefix every component name. If you wish to not - # have any prefix you can specify an empty string. - prefix: ${pipeline.name}- - from: # Must not be null - topics: # read from topic - ${pipeline.name}-input-topic: - type: input # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra - ${pipeline.name}-input-pattern-topic: - type: pattern # Implied to be an input pattern if `role` is undefined - ${pipeline.name}-extra-pattern-topic: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - components: # read from specific component - account-producer: - type: output # Implied when role is NOT specified - other-producer: - role: some-role # Implies `type` to be extra - component-as-input-pattern: - type: pattern # Implied to be an input pattern if `role` is undefined - component-as-extra-pattern: - type: pattern # Implied to be an extra pattern if `role` is defined - role: some-role - # Topic(s) into which the component will write output - to: - topics: - ${pipeline.name}-output-topic: - type: output # Implied when role is NOT specified - ${pipeline.name}-extra-topic: - role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined - ${pipeline.name}-error-topic: - type: error - # Currently KPOps supports Avro and JSON schemas. - key_schema: key-schema # must implement SchemaProvider to use - value_schema: value-schema - partitions_count: 1 - replication_factor: 1 - configs: # https://kafka.apache.org/documentation/#topicconfigs - cleanup.policy: compact - models: # SchemaProvider is initiated with the values given here - model: model - namespace: namespace # required - # `app` contains application-specific settings, hence it does not have a rigid - # structure. The fields below are just an example. - app: # required - image: exampleImage # Example - debug: false # Example - commandLine: {} # Example -# Holds configuration to use as values for the streams bootstrap producer-app Helm -# chart. -# -# Child of: KafkaApp -# More documentation on ProducerApp: https://github.com/bakdata/streams-bootstrap -producer-app: - # from: # While the producer-app does inherit from kafka-app, it does not need a - # `from` section, hence it does not support it. - # Allowed configs: - # https://github.com/bakdata/streams-bootstrap/tree/master/charts/producer-app - app: # required - streams: # required, producer-app-specific - brokers: ${config.kafka_brokers} # required - schemaRegistryUrl: ${config.schema_registry.url} - outputTopic: output_topic - extraOutputTopics: - output_role1: output_topic1 - output_role2: output_topic2 - nameOverride: override-with-this-name # kafka-app-specific -# StreamsApp component that configures a streams bootstrap app. -# -# Child of: KafkaApp -# More documentation on StreamsApp: https://github.com/bakdata/streams-bootstrap -streams-app: - # No arbitrary keys are allowed under `app`here - # Allowed configs: - # https://github.com/bakdata/streams-bootstrap/tree/master/charts/streams-app - app: # required - # Streams Bootstrap streams section - streams: # required, streams-app-specific - brokers: ${config.kafka_brokers} # required - schemaRegistryUrl: ${config.schema_registry.url} - inputTopics: - - topic1 - - topic2 - outputTopic: output-topic - inputPattern: input-pattern - extraInputTopics: - input_role1: - - input_topic1 - - input_topic2 - input_role2: - - input_topic3 - - input_topic4 - extraInputPatterns: - pattern_role1: input_pattern1 - extraOutputTopics: - output_role1: output_topic1 - output_role2: output_topic2 - errorTopic: error-topic - config: - my.streams.config: my.value - nameOverride: override-with-this-name # streams-app-specific - autoscaling: # streams-app-specific - consumerGroup: consumer-group # required - lagThreshold: 0 # Average target value to trigger scaling actions. - enabled: false # Whether to enable auto-scaling using KEDA. - # This is the interval to check each trigger on. - # https://keda.sh/docs/2.9/concepts/scaling-deployments/#pollinginterval - pollingInterval: 30 - # The period to wait after the last trigger reported active before scaling - # the resource back to 0. https://keda.sh/docs/2.9/concepts/scaling-deployments/#cooldownperiod - cooldownPeriod: 300 - # The offset reset policy for the consumer if the the consumer group is - # not yet subscribed to a partition. - offsetResetPolicy: earliest - # This setting is passed to the HPA definition that KEDA will create for a - # given resource and holds the maximum number of replicas of the target resouce. - # https://keda.sh/docs/2.9/concepts/scaling-deployments/#maxreplicacount - maxReplicas: 1 - # Minimum number of replicas KEDA will scale the resource down to. - # https://keda.sh/docs/2.7/concepts/scaling-deployments/#minreplicacount - minReplicas: 0 - # If this property is set, KEDA will scale the resource down to this - # number of replicas. - # https://keda.sh/docs/2.9/concepts/scaling-deployments/#idlereplicacount - idleReplicas: 0 - topics: # List of auto-generated Kafka Streams topics used by the streams app. - - topic1 - - topic2 + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + from: # Must not be null + topics: # read from topic + ${pipeline.name}-input-topic: + type: input # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra + ${pipeline.name}-input-pattern-topic: + type: pattern # Implied to be an input pattern if `role` is undefined + ${pipeline.name}-extra-pattern-topic: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + components: # read from specific component + account-producer: + type: output # Implied when role is NOT specified + other-producer: + role: some-role # Implies `type` to be extra + component-as-input-pattern: + type: pattern # Implied to be an input pattern if `role` is undefined + component-as-extra-pattern: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: + type: output # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model + # `app` can contain application-specific settings, hence the user is free to + # add the key-value pairs they need. + app: # required + streams: # required + brokers: ${config.kafka_brokers} # required + schemaRegistryUrl: ${config.schema_registry.url} + nameOverride: override-with-this-name # kafka-app-specific + imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app +# Kafka connector +# +# Parent of: KafkaSinkConnector, KafkaSourceConnector +# Child of: PipelineComponent +kafka-connector: + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + from: # Must not be null + topics: # read from topic + ${pipeline.name}-input-topic: + type: input # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra + ${pipeline.name}-input-pattern-topic: + type: pattern # Implied to be an input pattern if `role` is undefined + ${pipeline.name}-extra-pattern-topic: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + components: # read from specific component + account-producer: + type: output # Implied when role is NOT specified + other-producer: + role: some-role # Implies `type` to be extra + component-as-input-pattern: + type: pattern # Implied to be an input pattern if `role` is undefined + component-as-extra-pattern: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: + type: output # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model + namespace: namespace # required + # `app` contains application-specific settings, hence it does not have a rigid + # structure. The fields below are just an example. Extensive documentation on + # connectors: https://kafka.apache.org/documentation/#connectconfigs + app: # required + tasks.max: 1 + # Helm repository configuration for resetter + repo_config: + repository_name: my-repo # required + url: https://bakdata.github.io/kafka-connect-resetter/ # required + repo_auth_flags: + username: user + password: pass + ca_file: /home/user/path/to/ca-file + insecure_skip_tls_verify: false + version: "1.0.6" # Helm chart version + # Overriding Kafka Connect Resetter Helm values. E.g. to override the + # Image Tag etc. + resetter_values: + imageTag: "1.2.3" +# Kafka sink connector +# +# Child of: KafkaConnector +kafka-sink-connector: + # No settings differ from `kafka-connector` +# Kafka source connector +# +# Child of: KafkaConnector +kafka-source-connector: + # The source connector has no `from` section + # from: + # offset.storage.topic + # https://kafka.apache.org/documentation/#connect_running + offset_topic: offset_topic +# Base Kubernetes App +# +# Parent of: HelmApp +# Child of: PipelineComponent +kubernetes-app: + # Pipeline prefix that will prefix every component name. If you wish to not + # have any prefix you can specify an empty string. + prefix: ${pipeline.name}- + from: # Must not be null + topics: # read from topic + ${pipeline.name}-input-topic: + type: input # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra + ${pipeline.name}-input-pattern-topic: + type: pattern # Implied to be an input pattern if `role` is undefined + ${pipeline.name}-extra-pattern-topic: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + components: # read from specific component + account-producer: + type: output # Implied when role is NOT specified + other-producer: + role: some-role # Implies `type` to be extra + component-as-input-pattern: + type: pattern # Implied to be an input pattern if `role` is undefined + component-as-extra-pattern: + type: pattern # Implied to be an extra pattern if `role` is defined + role: some-role + # Topic(s) into which the component will write output + to: + topics: + ${pipeline.name}-output-topic: + type: output # Implied when role is NOT specified + ${pipeline.name}-extra-topic: + role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined + ${pipeline.name}-error-topic: + type: error + # Currently KPOps supports Avro and JSON schemas. + key_schema: key-schema # must implement SchemaProvider to use + value_schema: value-schema + partitions_count: 1 + replication_factor: 1 + configs: # https://kafka.apache.org/documentation/#topicconfigs + cleanup.policy: compact + models: # SchemaProvider is initiated with the values given here + model: model + namespace: namespace # required + # `app` contains application-specific settings, hence it does not have a rigid + # structure. The fields below are just an example. + app: # required + image: exampleImage # Example + debug: false # Example + commandLine: {} # Example +# Holds configuration to use as values for the streams bootstrap producer-app Helm +# chart. +# +# Child of: KafkaApp +# More documentation on ProducerApp: https://github.com/bakdata/streams-bootstrap +producer-app: + # from: # While the producer-app does inherit from kafka-app, it does not need a + # `from` section, hence it does not support it. + # Allowed configs: + # https://github.com/bakdata/streams-bootstrap/tree/master/charts/producer-app + app: # required + streams: # required, producer-app-specific + brokers: ${config.kafka_brokers} # required + schemaRegistryUrl: ${config.schema_registry.url} + outputTopic: output_topic + extraOutputTopics: + output_role1: output_topic1 + output_role2: output_topic2 + nameOverride: override-with-this-name # kafka-app-specific +# StreamsApp component that configures a streams bootstrap app. +# +# Child of: KafkaApp +# More documentation on StreamsApp: https://github.com/bakdata/streams-bootstrap +streams-app: + # No arbitrary keys are allowed under `app`here + # Allowed configs: + # https://github.com/bakdata/streams-bootstrap/tree/master/charts/streams-app + app: # required + # Streams Bootstrap streams section + streams: # required, streams-app-specific + brokers: ${config.kafka_brokers} # required + schemaRegistryUrl: ${config.schema_registry.url} + inputTopics: + - topic1 + - topic2 + outputTopic: output-topic + inputPattern: input-pattern + extraInputTopics: + input_role1: + - input_topic1 + - input_topic2 + input_role2: + - input_topic3 + - input_topic4 + extraInputPatterns: + pattern_role1: input_pattern1 + extraOutputTopics: + output_role1: output_topic1 + output_role2: output_topic2 + errorTopic: error-topic + config: + my.streams.config: my.value + nameOverride: override-with-this-name # streams-app-specific + autoscaling: # streams-app-specific + consumerGroup: consumer-group # required + lagThreshold: 0 # Average target value to trigger scaling actions. + enabled: false # Whether to enable auto-scaling using KEDA. + # This is the interval to check each trigger on. + # https://keda.sh/docs/2.9/concepts/scaling-deployments/#pollinginterval + pollingInterval: 30 + # The period to wait after the last trigger reported active before scaling + # the resource back to 0. https://keda.sh/docs/2.9/concepts/scaling-deployments/#cooldownperiod + cooldownPeriod: 300 + # The offset reset policy for the consumer if the the consumer group is + # not yet subscribed to a partition. + offsetResetPolicy: earliest + # This setting is passed to the HPA definition that KEDA will create for a + # given resource and holds the maximum number of replicas of the target resouce. + # https://keda.sh/docs/2.9/concepts/scaling-deployments/#maxreplicacount + maxReplicas: 1 + # Minimum number of replicas KEDA will scale the resource down to. + # https://keda.sh/docs/2.7/concepts/scaling-deployments/#minreplicacount + minReplicas: 0 + # If this property is set, KEDA will scale the resource down to this + # number of replicas. + # https://keda.sh/docs/2.9/concepts/scaling-deployments/#idlereplicacount + idleReplicas: 0 + topics: # List of auto-generated Kafka Streams topics used by the streams app. + - topic1 + - topic2

    diff --git a/dev/resources/variables/cli_env_vars/index.html b/dev/resources/variables/cli_env_vars/index.html index bcb1444fc..ff3404b33 100644 --- a/dev/resources/variables/cli_env_vars/index.html +++ b/dev/resources/variables/cli_env_vars/index.html @@ -702,6 +702,8 @@ + + @@ -800,6 +802,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/resources/variables/config_env_vars/index.html b/dev/resources/variables/config_env_vars/index.html index ec6607944..eafc9db69 100644 --- a/dev/resources/variables/config_env_vars/index.html +++ b/dev/resources/variables/config_env_vars/index.html @@ -702,6 +702,8 @@ + + @@ -800,6 +802,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/schema/defaults.json b/dev/schema/defaults.json index d81314997..06ec5fdc0 100644 --- a/dev/schema/defaults.json +++ b/dev/schema/defaults.json @@ -247,36 +247,12 @@ "title": "Name", "type": "string" }, - "namespace": { - "description": "Namespace in which the component shall be deployed", - "title": "Namespace", - "type": "string" - }, "prefix": { "default": "${pipeline.name}-", "description": "Pipeline prefix that will prefix every component name. If you wish to not have any prefix you can specify an empty string.", "title": "Prefix", "type": "string" }, - "repo_config": { - "allOf": [ - { - "$ref": "#/$defs/HelmRepoConfig" - } - ], - "default": { - "repo_auth_flags": { - "ca_file": null, - "cert_file": null, - "insecure_skip_tls_verify": false, - "password": null, - "username": null - }, - "repository_name": "bakdata-streams-bootstrap", - "url": "https://bakdata.github.io/streams-bootstrap/" - }, - "description": "Configuration of the Helm chart repo to be used for deploying the component" - }, "to": { "anyOf": [ { @@ -288,24 +264,10 @@ ], "default": null, "description": "Topic(s) into which the component will write output" - }, - "version": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": "2.9.0", - "description": "Helm chart version", - "title": "Version" } }, "required": [ "name", - "namespace", "app" ], "title": "KafkaApp", @@ -837,7 +799,7 @@ }, "ProducerApp": { "additionalProperties": true, - "description": "Producer component.\nThis producer holds configuration to use as values for the streams bootstrap producer helm chart. Note that the producer does not support error topics.", + "description": "Producer component.\nThis producer holds configuration to use as values for the streams-bootstrap producer Helm chart. Note that the producer does not support error topics.", "properties": { "app": { "allOf": [ @@ -1079,7 +1041,7 @@ }, "StreamsApp": { "additionalProperties": true, - "description": "StreamsApp component that configures a streams bootstrap app.", + "description": "StreamsApp component that configures a streams-bootstrap app.", "properties": { "app": { "allOf": [ @@ -1258,7 +1220,7 @@ }, "StreamsAppValues": { "additionalProperties": true, - "description": "StreamsBoostrap app configurations.\nThe attributes correspond to keys and values that are used as values for the streams bootstrap helm chart.", + "description": "streams-bootstrap app configurations.\nThe attributes correspond to keys and values that are used as values for the streams bootstrap helm chart.", "properties": { "autoscaling": { "anyOf": [ @@ -1270,7 +1232,7 @@ } ], "default": null, - "description": "Kubernetes Event-driven Autoscaling config" + "description": "Kubernetes event-driven autoscaling config" }, "nameOverride": { "anyOf": [ @@ -1291,7 +1253,7 @@ "$ref": "#/$defs/StreamsConfig" } ], - "description": "Streams Bootstrap streams section" + "description": "streams-bootstrap streams section" } }, "required": [ @@ -1300,6 +1262,100 @@ "title": "StreamsAppValues", "type": "object" }, + "StreamsBootstrap": { + "additionalProperties": true, + "description": "Base for components with a streams-bootstrap Helm chart.", + "properties": { + "app": { + "allOf": [ + { + "$ref": "#/$defs/HelmAppValues" + } + ], + "description": "Helm app values" + }, + "from": { + "anyOf": [ + { + "$ref": "#/$defs/FromSection" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Topic(s) and/or components from which the component will read input", + "title": "From" + }, + "name": { + "description": "Component name", + "title": "Name", + "type": "string" + }, + "namespace": { + "description": "Namespace in which the component shall be deployed", + "title": "Namespace", + "type": "string" + }, + "prefix": { + "default": "${pipeline.name}-", + "description": "Pipeline prefix that will prefix every component name. If you wish to not have any prefix you can specify an empty string.", + "title": "Prefix", + "type": "string" + }, + "repo_config": { + "allOf": [ + { + "$ref": "#/$defs/HelmRepoConfig" + } + ], + "default": { + "repo_auth_flags": { + "ca_file": null, + "cert_file": null, + "insecure_skip_tls_verify": false, + "password": null, + "username": null + }, + "repository_name": "bakdata-streams-bootstrap", + "url": "https://bakdata.github.io/streams-bootstrap/" + }, + "description": "Configuration of the Helm chart repo to be used for deploying the component" + }, + "to": { + "anyOf": [ + { + "$ref": "#/$defs/ToSection" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Topic(s) into which the component will write output" + }, + "version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "2.9.0", + "description": "Helm chart version", + "title": "Version" + } + }, + "required": [ + "name", + "namespace", + "app" + ], + "title": "StreamsBootstrap", + "type": "object" + }, "StreamsConfig": { "additionalProperties": true, "description": "Streams Bootstrap streams section.", @@ -1315,6 +1371,19 @@ "title": "Config", "type": "object" }, + "deleteOutput": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the output topics with their associated schemas and the consumer group should be deleted during the cleanup", + "title": "Deleteoutput" + }, "errorTopic": { "anyOf": [ { @@ -1569,6 +1638,9 @@ }, "streams-app": { "$ref": "#/$defs/StreamsApp" + }, + "streams-bootstrap": { + "$ref": "#/$defs/StreamsBootstrap" } }, "required": [ @@ -1580,7 +1652,8 @@ "kubernetes-app", "pipeline-component", "producer-app", - "streams-app" + "streams-app", + "streams-bootstrap" ], "title": "DefaultsSchema", "type": "object" diff --git a/dev/schema/pipeline.json b/dev/schema/pipeline.json index f6bd2eeff..557dbc486 100644 --- a/dev/schema/pipeline.json +++ b/dev/schema/pipeline.json @@ -467,7 +467,7 @@ }, "ProducerApp": { "additionalProperties": true, - "description": "Producer component.\nThis producer holds configuration to use as values for the streams bootstrap producer helm chart. Note that the producer does not support error topics.", + "description": "Producer component.\nThis producer holds configuration to use as values for the streams-bootstrap producer Helm chart. Note that the producer does not support error topics.", "properties": { "app": { "allOf": [ @@ -709,7 +709,7 @@ }, "StreamsApp": { "additionalProperties": true, - "description": "StreamsApp component that configures a streams bootstrap app.", + "description": "StreamsApp component that configures a streams-bootstrap app.", "properties": { "app": { "allOf": [ @@ -888,7 +888,7 @@ }, "StreamsAppValues": { "additionalProperties": true, - "description": "StreamsBoostrap app configurations.\nThe attributes correspond to keys and values that are used as values for the streams bootstrap helm chart.", + "description": "streams-bootstrap app configurations.\nThe attributes correspond to keys and values that are used as values for the streams bootstrap helm chart.", "properties": { "autoscaling": { "anyOf": [ @@ -900,7 +900,7 @@ } ], "default": null, - "description": "Kubernetes Event-driven Autoscaling config" + "description": "Kubernetes event-driven autoscaling config" }, "nameOverride": { "anyOf": [ @@ -921,7 +921,7 @@ "$ref": "#/$defs/StreamsConfig" } ], - "description": "Streams Bootstrap streams section" + "description": "streams-bootstrap streams section" } }, "required": [ @@ -945,6 +945,19 @@ "title": "Config", "type": "object" }, + "deleteOutput": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the output topics with their associated schemas and the consumer group should be deleted during the cleanup", + "title": "Deleteoutput" + }, "errorTopic": { "anyOf": [ { diff --git a/dev/search/search_index.json b/dev/search/search_index.json index 48b77dd60..a6dec6b5f 100644 --- a/dev/search/search_index.json +++ b/dev/search/search_index.json @@ -1 +1 @@ -{"config": {"lang": ["en"], "separator": "[\\s\\-]+", "pipeline": ["stopWordFilter"]}, "docs": [{"location": "developer/auto-generation/", "title": "Auto generation", "text": "

    Auto generation happens mostly with pre-commit hooks. You can find the pre-commit configuration here. These pre-commit hooks call different Python scripts to auto generate code for the documentation.

    "}, {"location": "developer/auto-generation/#generation-scripts-and-their-respective-files", "title": "Generation scripts and their respective files", "text": ""}, {"location": "developer/auto-generation/#documentation", "title": "Documentation", "text": ""}, {"location": "developer/auto-generation/#variables", "title": "Variables", "text": "
    • cli_env_vars.env -- All CLI environment variables in a dotenv file.
    • cli_env_vars.md -- All CLI environment variables in a table.
    • config_env_vars.env -- Almost all pipeline config environment variables in a dotenv file. The script checks for each field in KpopsConfig whether it has an env attribute defined. The script is currently unable to visit the classes of fields like topic_name_config, hence any environment variables defined there would remain unknown to it.
    • config_env_vars.env -- Almost all pipeline config environment variables in a table.
    • variable_substitution.yaml -- A copy of ./tests/pipeline/resources/component-type-substitution/pipeline.yaml used as an example of substitution.
    "}, {"location": "developer/auto-generation/#cli-commands", "title": "CLI commands", "text": "

    Generated by typer-cli from the code in main.py. It is called with Python's subprocess module.

    "}, {"location": "developer/auto-generation/#pipeline-and-defaults-example-definitions", "title": "Pipeline and defaults example definitions", "text": "

    Generates example pipeline.yaml and defaults.yaml for each individual component, stores them and also concatenates them into 1 big pipeline definition and 1 big pipeline defaults definition.

    User input

    • headers/*\\.yaml -- The top of each example. Includes a description comment, type and name. The headers for pipeline.yaml reside in the pipeline-components dir and the defaults.yaml headers reside in the pipeline-defaults dir. The names of the files must be equal to the respective component type.
    • sections/*\\.yaml -- Each YAML file contains a single section (component attribute) definition. The intention is to keep the minimal set of definitions there from which any component definition can be built. The names of the files must be equal to the respective component type and the attribute name. The sections are used for both defaults.yaml and pipeline.yaml generation and reside in the pipeline-components dir.

    Generated

    • pipeline-components/dependencies/* Cached information about KPOps components
    • pipeline_component_dependencies.yaml -- Specifies per component which files in the sections dir should be used for the pipeline.yaml generation.
    • defaults_pipeline_component_dependencies.yaml -- Specifies per component which files in the sections dir should be used for the defaults.yaml generation.
    • kpops_structure.yaml -- Specifies the inheritance hierarchy of the components and what sections exist in each component.
    • pipeline-components/*\\.yaml -- All single-component pipeline definitions and one big (complete) pipeline.yaml that contains all of them.
    • pipeline-defaults/*\\.yaml -- All single-component defaults definitions and one big (complete) defaults.yaml that contains all of them.
    "}, {"location": "developer/auto-generation/#editor-integration", "title": "Editor integration", "text": ""}, {"location": "developer/auto-generation/#schemas", "title": "Schemas", "text": "
    • config.json
    • pipeline.json
    "}, {"location": "developer/contributing/", "title": "How to contribute", "text": "

    Welcome! We are glad to have you visit our contributing guide!

    If you find any bugs or have suggestions for improvements, please open an issue and optionally a pull request (PR). In the case of a PR, we would appreciate it if you preface it with an issue outlining your goal and means of achieving it.

    "}, {"location": "developer/contributing/#style", "title": "Style", "text": "

    We advise that you stick to our pre-commit hooks for code linting, formatting, and auto-generation of documentation. After you install them using poetry run pre-commit install they're triggered automatically during git commit. Additionally, you can manually invoke them with poetry run pre-commit run -a. In order for dprint to work, you have to manually install it locally. It will work in the CI, so it is also possible to manually carry out formatting changes flagged by dprint in the CI and skip installing it locally.

    "}, {"location": "developer/contributing/#python", "title": "Python", "text": "

    To ensure a consistent Python code style, we use Ruff for both linting and formatting. The official docs contain a guide on editor integration.

    Our configuration can be found in KPOps' top-level pyproject.toml.

    "}, {"location": "developer/contributing/#markdown", "title": "Markdown", "text": "

    To ensure a consistent markdown style, we use dprint's Markdown code formatter. Our configuration can be found here.

    "}, {"location": "developer/contributing/#css", "title": "CSS", "text": "

    To ensure a consistent CSS style, we use the malva dprint's plugin. Our configuration can be found here.

    "}, {"location": "developer/contributing/#toml", "title": "TOML", "text": "

    To ensure a consistent TOML style, we use dprint's TOML code formatter. Our configuration can be found here.

    "}, {"location": "developer/getting-started/", "title": "Getting started", "text": "

    Welcome! We are glad to have you visit our developer guide! If you find any bugs or have suggestions for improvements, please open an issue and optionally a pull request (PR). In the case of a PR, we would appreciate it if you preface it with an issue outlining your goal and means of achieving it.

    Find more about our code-style or insights into KPOps' code base here in our developer guide.

    Work in progress

    The developer guide is still under construction. If you have a question left unanswered here, feel free to ask it by opening an issue.

    "}, {"location": "user/changelog/", "title": "Changelog", "text": ""}, {"location": "user/changelog/#2011-release-date-2023-10-24", "title": "2.0.11 - Release Date: [2023-10-24]", "text": ""}, {"location": "user/changelog/#fixes", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix early exit upon Helm exit code 1 - #376

    • Fix docs setup page list indentation - #377

    "}, {"location": "user/changelog/#documentation", "title": "\ud83d\udcdd Documentation", "text": "
    • Migrate deprecated mkdocs-material-extensions - #378

    • Fix docs setup page list indentation - #377

    • Exclude resources from docs search - #371

    "}, {"location": "user/changelog/#2010-release-date-2023-10-12", "title": "2.0.10 - Release Date: [2023-10-12]", "text": ""}, {"location": "user/changelog/#miscellaneous", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Fix environment variables documentation generation - #362

    • Introduce ruff - #363

    • Print details on connector name mismatch error - #369

    • Enable transparent OS environment lookups from internal environment - #368

    "}, {"location": "user/changelog/#209-release-date-2023-09-19", "title": "2.0.9 - Release Date: [2023-09-19]", "text": ""}, {"location": "user/changelog/#fixes_1", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix Kafka connect config name for deletion - #361
    "}, {"location": "user/changelog/#documentation_1", "title": "\ud83d\udcdd Documentation", "text": "
    • Fix link to kpops-examples - #357
    "}, {"location": "user/changelog/#208-release-date-2023-09-06", "title": "2.0.8 - Release Date: [2023-09-06]", "text": ""}, {"location": "user/changelog/#fixes_2", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix config.yaml overriding environment variables - #353
    "}, {"location": "user/changelog/#refactor", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor component prefix & name - #326

    • Remove unnecessary condition during inflate - #328

    "}, {"location": "user/changelog/#207-release-date-2023-08-31", "title": "2.0.7 - Release Date: [2023-08-31]", "text": ""}, {"location": "user/changelog/#fixes_3", "title": "\ud83d\udc1b Fixes", "text": "
    • Print only rendered templates when --template flag is set - #350
    "}, {"location": "user/changelog/#documentation_2", "title": "\ud83d\udcdd Documentation", "text": "
    • Add migration guide - #352
    "}, {"location": "user/changelog/#206-release-date-2023-08-30", "title": "2.0.6 - Release Date: [2023-08-30]", "text": ""}, {"location": "user/changelog/#refactor_1", "title": "\ud83c\udfed Refactor", "text": "
    • Simplify deployment with local Helm charts - #349
    "}, {"location": "user/changelog/#205-release-date-2023-08-30", "title": "2.0.5 - Release Date: [2023-08-30]", "text": ""}, {"location": "user/changelog/#fixes_4", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix versioning of docs when releasing - #346
    "}, {"location": "user/changelog/#204-release-date-2023-08-29", "title": "2.0.4 - Release Date: [2023-08-29]", "text": ""}, {"location": "user/changelog/#fixes_5", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix GitHub ref variable for pushing docs to main branch - #343
    "}, {"location": "user/changelog/#documentation_3", "title": "\ud83d\udcdd Documentation", "text": "
    • Add dprint as the markdown formatter - #337

    • Publish pre-release docs for PRs & main branch - #339

    • Align docs colours - #345

    "}, {"location": "user/changelog/#miscellaneous_1", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Exclude abstract components from pipeline schema - #332
    "}, {"location": "user/changelog/#203-release-date-2023-08-24", "title": "2.0.3 - Release Date: [2023-08-24]", "text": ""}, {"location": "user/changelog/#fixes_6", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix GitHub action error in non-Python projects - #340
    "}, {"location": "user/changelog/#miscellaneous_2", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Lint GitHub action - #342
    "}, {"location": "user/changelog/#202-release-date-2023-08-23", "title": "2.0.2 - Release Date: [2023-08-23]", "text": ""}, {"location": "user/changelog/#documentation_4", "title": "\ud83d\udcdd Documentation", "text": "
    • Add version dropdown to the documentation - #336

    • Break the documentation down into smaller subsection - #329

    "}, {"location": "user/changelog/#201-release-date-2023-08-22", "title": "2.0.1 - Release Date: [2023-08-22]", "text": ""}, {"location": "user/changelog/#fixes_7", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix optional flags in GitHub action - #334
    "}, {"location": "user/changelog/#200-release-date-2023-08-17", "title": "2.0.0 - Release Date: [2023-08-17]", "text": ""}, {"location": "user/changelog/#breaking-changes", "title": "\ud83c\udfd7\ufe0f Breaking changes", "text": "
    • Remove camel case conversion of internal models - #308

    • Derive component type automatically from class name - #309

    • Refactor input/output types - #232

    • v2 - #321

    "}, {"location": "user/changelog/#features", "title": "\ud83d\ude80 Features", "text": "
    • Automatically support schema generation for custom components - #307

    • Derive component type automatically from class name - #309

    "}, {"location": "user/changelog/#refactor_2", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor input/output types - #232
    "}, {"location": "user/changelog/#documentation_5", "title": "\ud83d\udcdd Documentation", "text": "
    • Fix editor integration example in docs - #273
    "}, {"location": "user/changelog/#172-release-date-2023-08-16", "title": "1.7.2 - Release Date: [2023-08-16]", "text": ""}, {"location": "user/changelog/#refactor_3", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor Kafka Connect handler - #322
    "}, {"location": "user/changelog/#documentation_6", "title": "\ud83d\udcdd Documentation", "text": "
    • Add KPOps Runner GitHub Action to the documentation - #325

    • Remove :type and :rtype from docstrings - #324

    "}, {"location": "user/changelog/#171-release-date-2023-08-15", "title": "1.7.1 - Release Date: [2023-08-15]", "text": ""}, {"location": "user/changelog/#documentation_7", "title": "\ud83d\udcdd Documentation", "text": "
    • Modularize and autogenerate examples for the documentation - #267

    • Update the variable documentation - #266

    "}, {"location": "user/changelog/#170-release-date-2023-08-15", "title": "1.7.0 - Release Date: [2023-08-15]", "text": ""}, {"location": "user/changelog/#features_1", "title": "\ud83d\ude80 Features", "text": "
    • Add flag to exclude pipeline steps - #300
    "}, {"location": "user/changelog/#160-release-date-2023-08-10", "title": "1.6.0 - Release Date: [2023-08-10]", "text": ""}, {"location": "user/changelog/#refactor_4", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor handling of Helm flags - #319
    "}, {"location": "user/changelog/#150-release-date-2023-08-10", "title": "1.5.0 - Release Date: [2023-08-10]", "text": ""}, {"location": "user/changelog/#features_2", "title": "\ud83d\ude80 Features", "text": "
    • Refactor Helm wrapper and add --set-file flag - #311
    "}, {"location": "user/changelog/#refactor_5", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor Helm wrapper and add --set-file flag - #311

    • Set default for ToSection topics - #313

    • Annotate types for ToSection models mapping - #315

    "}, {"location": "user/changelog/#miscellaneous_3", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Check Poetry lock file consistency - #316
    "}, {"location": "user/changelog/#140-release-date-2023-08-02", "title": "1.4.0 - Release Date: [2023-08-02]", "text": ""}, {"location": "user/changelog/#fixes_8", "title": "\ud83d\udc1b Fixes", "text": "
    • Validate unique step names - #292
    "}, {"location": "user/changelog/#refactor_6", "title": "\ud83c\udfed Refactor", "text": "
    • Order PipelineComponent fields - #290

    • Migrate requests to httpx - #302

    • Refactor CLI using dtyper - #306

    "}, {"location": "user/changelog/#miscellaneous_4", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Update Black - #294

    • Fix vulnerability in mkdocs-material - #295

    • Move breaking changes section upper in the change log config - #287

    "}, {"location": "user/changelog/#132-release-date-2023-07-13", "title": "1.3.2 - Release Date: [2023-07-13]", "text": ""}, {"location": "user/changelog/#fixes_9", "title": "\ud83d\udc1b Fixes", "text": "
    • Exclude Helm tests from dry-run diff - #293
    "}, {"location": "user/changelog/#131-release-date-2023-07-11", "title": "1.3.1 - Release Date: [2023-07-11]", "text": ""}, {"location": "user/changelog/#refactor_7", "title": "\ud83c\udfed Refactor", "text": "
    • Remove workaround for pipeline steps - #276
    "}, {"location": "user/changelog/#miscellaneous_5", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Update codeowners - #281

    • Reactivate Windows CI - #255

    • Downgrade Poetry version on the Windows CI pipeline - #286

    • Set ANSI theme for output of kpops generate - #289

    "}, {"location": "user/changelog/#130-release-date-2023-07-07", "title": "1.3.0 - Release Date: [2023-07-07]", "text": ""}, {"location": "user/changelog/#refactor_8", "title": "\ud83c\udfed Refactor", "text": "
    • Plural broker field in pipeline config - #278
    "}, {"location": "user/changelog/#documentation_8", "title": "\ud83d\udcdd Documentation", "text": "
    • Update KPOps runner readme for dev versions - #279
    "}, {"location": "user/changelog/#breaking-changes_1", "title": "\ud83c\udfd7\ufe0f Breaking changes", "text": "
    • Plural broker field in pipeline config - #278
    "}, {"location": "user/changelog/#miscellaneous_6", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Add breaking changes section to change log config - #280
    "}, {"location": "user/changelog/#124-release-date-2023-06-27", "title": "1.2.4 - Release Date: [2023-06-27]", "text": ""}, {"location": "user/changelog/#miscellaneous_7", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Update changelog action to contain miscellaneous PRs - #269
    "}, {"location": "user/changelog/#123-release-date-2023-06-22", "title": "1.2.3 - Release Date: [2023-06-22]", "text": ""}, {"location": "user/changelog/#fixes_10", "title": "\ud83d\udc1b Fixes", "text": "
    • Refactor custom component validation & hide field from kpops output - #265
    "}, {"location": "user/changelog/#refactor_9", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor custom component validation & hide field from kpops output - #265
    "}, {"location": "user/changelog/#miscellaneous_8", "title": "\ud83c\udf00 Miscellaneous", "text": ""}, {"location": "user/changelog/#122-release-date-2023-06-21", "title": "1.2.2 - Release Date: [2023-06-21]", "text": ""}, {"location": "user/changelog/#miscellaneous_9", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Create workflow to lint CI - #260

    • Fix update docs when releasing - #261

    • Rename change log message for uncategorized issues - #262

    "}, {"location": "user/changelog/#121-release-date-2023-06-21", "title": "1.2.1 - Release Date: [2023-06-21]", "text": "Uncategorized
    • Fix update docs in release workflow - #258
    "}, {"location": "user/changelog/#120-release-date-2023-06-21", "title": "1.2.0 - Release Date: [2023-06-21]", "text": ""}, {"location": "user/changelog/#features_3", "title": "\ud83d\ude80 Features", "text": "
    • Add helm repo update <repo-name> for Helm >3.7 - #239
    "}, {"location": "user/changelog/#fixes_11", "title": "\ud83d\udc1b Fixes", "text": "
    • add --namespace option to Helm template command - #237

    • Add missing type annotation for Pydantic attributes - #238

    • Fix helm version check - #242

    • Fix Helm Version Check - #244

    • Fix import from external module - #256

    "}, {"location": "user/changelog/#refactor_10", "title": "\ud83c\udfed Refactor", "text": "
    • Remove enable option from helm diff - #235

    • Refactor variable substitution - #198

    Uncategorized
    • Add background to docs home page - #236

    • Update Poetry version in CI - #247

    • Add pip cache in KPOps runner action - #249

    • Check types using Pyright - #251

    • Remove MyPy - #252

    • Disable broken Windows CI temporarily - #253

    • Update release and publish workflows - #254

    • Fix release & publish workflows - #257

    "}, {"location": "user/what-is-kpops/", "title": "What is KPOps?", "text": "

    With a couple of easy commands in the shell and a pipeline.yaml of under 30 lines, KPOps can not only deploy a Kafka pipeline1 to a Kubernetes cluster, but also reset, clean or destroy it!

    "}, {"location": "user/what-is-kpops/#key-features", "title": "Key features", "text": "
    • Deploy Kafka apps to Kubernetes: KPOps allows to deploy consecutive Kafka Streams applications and producers using an easy-to-read and -write pipeline definition.
    • Manage Kafka Connectors: KPOps connects with your Kafka Connect cluster and deploys, validates, and deletes your connectors.
    • Configure multiple pipelines and steps: KPOps has various abstractions that simplify configuring multiple pipelines and steps within pipelines by sharing common configuration between different components, such as producers or streaming applications.
    • Handle your topics and schemas: KPOps not only creates and deletes your topics but also registers and deletes your schemas.
    • Clean termination of Kafka components: KPOps removes your pipeline components (i.e., Kafka Streams applications) from the Kubernetes cluster and cleans up the component-related states (i.e., removing/resetting offset of Kafka consumer groups).
    • Preview your pipeline changes: With the KPOps dry-run, you can ensure your pipeline definition is set up correctly. This helps to minimize downtime and prevent potential errors or issues that could impact your production environment.
    "}, {"location": "user/what-is-kpops/#example", "title": "Example", "text": "An overview of Word-count pipeline shown in Streams Explorer Word-count pipeline.yaml
    - type: producer-app\n  name: data-producer\n  app:\n    image: bakdata/kpops-demo-sentence-producer\n    imageTag: \"1.0.0\"\n\n- type: streams-app\n  name: word-counter\n  to:\n    topics:\n      ${output_topic_name}:\n        type: output\n        configs:\n          cleanup.policy: compact\n  app:\n    replicaCount: 1\n    image: bakdata/kpops-demo-word-count-app\n    imageTag: \"1.0.0\"\n\n- type: kafka-sink-connector\n  name: redis-sink-connector\n  app:\n    connector.class: com.github.jcustenborder.kafka.connect.redis.RedisSinkConnector\n    redis.hosts: redis-headless:6379\n    redis.database: 0\n    tasks.max: 1\n    key.converter: org.apache.kafka.connect.storage.StringConverter\n    value.converter: org.apache.kafka.connect.storage.StringConverter\n
    1. A Kafka pipeline can consist of consecutive streaming applications, producers, and connectors.\u00a0\u21a9

    "}, {"location": "user/core-concepts/config/", "title": "Configuration", "text": "

    KPOps reads its global configuration that is unrelated to a pipeline's components from config.yaml.

    Consider enabling KPOps' editor integration feature to enjoy the benefits of autocompletion and validation when configuring your pipeline.

    To learn about any of the available settings, take a look at the example below.

    config.yaml
    # CONFIGURATION\n#\n# The path to the folder containing the defaults.yaml file and the environment\n# defaults files.\ndefaults_path: .\n# The environment you want to generate and deploy the pipeline to. Suffix your\n# environment files with this value (e.g. defaults_development.yaml and\n# pipeline_development.yaml for environment=development).\n# REQUIRED\nenvironment: development\n# The Kafka brokers address.\n# REQUIRED\nbrokers: \"http://broker1:9092,http://broker2:9092\"\n# The name of the defaults file and the prefix of the defaults environment file.\ndefaults_filename_prefix: defaults\n# Configures topic names.\ntopic_name_config: \n  # Configures the value for the variable ${output_topic_name}\n  default_output_topic_name: ${pipeline.name}-${component_name}\n  # Configures the value for the variable ${error_topic_name}\n  default_error_topic_name: ${pipeline.name}-${component_name}-error\n# Address of the Schema Registry\nschema_registry_url: \"http://localhost:8081\"\n# Address of the Kafka REST Proxy.\nkafka_rest_host: \"http://localhost:8082\"\n# Address of Kafka Connect.\nkafka_connect_host: \"http://localhost:8083\"\n# The timeout in seconds that specifies when actions like deletion or deploy\n# timeout.\ntimeout: 300\n# Flag for `helm upgrade --install`.\n# Create the release namespace if not present.\ncreate_namespace: false\n# Global flags for Helm.\nhelm_config:\n  # Set the name of the kubeconfig context. (--kube-context)\n  context: name\n  # Run Helm in Debug mode.\n  debug: false\n# Configure Helm Diff.\nhelm_diff_config: \n  # Set of keys that should not be checked.\n  ignore: \n    - name\n    - imageTag\n# Whether to retain clean up jobs in the cluster or uninstall the, after\n# completion.\nretain_clean_jobs: false\n

    Environment-specific pipeline definitions

    Similarly to defaults, it is possible to have an unlimited amount of additional environment-specific pipeline definitions. The naming convention is the same: add a suffix of the form _{environment} to the filename.

    "}, {"location": "user/core-concepts/defaults/", "title": "Defaults", "text": "

    KPOps has a very efficient way of dealing with repeating settings which manifests as defaults.yaml. This file provides the user with the power to set defaults for any and all components, thus omitting the need to repeat the same settings in pipeline.yaml.

    See real-world examples for defaults.

    "}, {"location": "user/core-concepts/defaults/#features", "title": "Features", "text": ""}, {"location": "user/core-concepts/defaults/#inheritance", "title": "Inheritance", "text": "

    An important mechanic of KPOps is that defaults set for a component apply to all components that inherit from it.

    It is possible, although not recommended, to add settings that are specific to a component's subclass. An example would be configuring offset_topic under kafka-connector instead of kafka-source-connector.

    "}, {"location": "user/core-concepts/defaults/#configuration", "title": "Configuration", "text": "

    It is possible to set specific defaults for each environment by adding files called defaults_{environment}.yaml to the defaults folder at defaults_path. The defaults are loaded based on the currently set environment.

    It is important to note that defaults_{environment}.yaml overrides only the settings that are explicitly set to be different from the ones in the base defaults file.

    Tip

    defaults is the default value of defaults_filename_prefix. Together with defaults_path and environment it can be changed in config.yaml

    "}, {"location": "user/core-concepts/defaults/#components", "title": "Components", "text": "

    The defaults codeblocks in this section contain the full set of settings that are specific to the component. If a setting already exists in a parent config, it will not be included in the child's.

    "}, {"location": "user/core-concepts/defaults/#kubernetesapp", "title": "KubernetesApp", "text": "defaults.yaml
    # Base Kubernetes App\n#\n# Parent of: HelmApp\n# Child of: PipelineComponent\nkubernetes-app:\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example.\n  app: # required\n    image: exampleImage # Example\n    debug: false # Example\n    commandLine: {} # Example\n
    "}, {"location": "user/core-concepts/defaults/#kafkaapp", "title": "KafkaApp", "text": "defaults.yaml
    # Base component for Kafka-based components.\n#\n# Parent of: ProducerApp, StreamsApp\n# Child of: KubernetesApp\nkafka-app:\n  # `app` can contain application-specific settings, hence  the user is free to\n  # add the key-value pairs they need.\n  app: # required\n    streams: # required\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n    nameOverride: override-with-this-name # kafka-app-specific\n    imageTag: \"1.0.0\" # Example values that are shared between streams-app and producer-app\n  version: \"2.12.0\" # Helm chart version\n
    "}, {"location": "user/core-concepts/defaults/#streamsapp", "title": "StreamsApp", "text": "defaults.yaml
    # StreamsApp component that configures a streams bootstrap app.\n#\n# Child of: KafkaApp\n# More documentation on StreamsApp: https://github.com/bakdata/streams-bootstrap\nstreams-app:\n  # No arbitrary keys are allowed under `app`here\n  # Allowed configs:\n  # https://github.com/bakdata/streams-bootstrap/tree/master/charts/streams-app\n  app: # required\n    # Streams Bootstrap streams section\n    streams: # required, streams-app-specific\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n      inputTopics:\n        - topic1\n        - topic2\n      outputTopic: output-topic\n      inputPattern: input-pattern\n      extraInputTopics:\n        input_role1:\n          - input_topic1\n          - input_topic2\n        input_role2:\n          - input_topic3\n          - input_topic4\n      extraInputPatterns:\n        pattern_role1: input_pattern1\n      extraOutputTopics:\n        output_role1: output_topic1\n        output_role2: output_topic2\n      errorTopic: error-topic\n      config:\n        my.streams.config: my.value\n    nameOverride: override-with-this-name # streams-app-specific\n    autoscaling: # streams-app-specific\n      consumerGroup: consumer-group # required\n      lagThreshold: 0 # Average target value to trigger scaling actions.\n      enabled: false # Whether to enable auto-scaling using KEDA.\n      # This is the interval to check each trigger on.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#pollinginterval\n      pollingInterval: 30\n      # The period to wait after the last trigger reported active before scaling\n      #  the resource back to 0. https://keda.sh/docs/2.9/concepts/scaling-deployments/#cooldownperiod\n      cooldownPeriod: 300\n      # The offset reset policy for the consumer if the the consumer group is\n      # not yet subscribed to a partition.\n      offsetResetPolicy: earliest\n      # This setting is passed to the HPA definition that KEDA will create for a\n      # given resource and holds the maximum number of replicas of the target resouce.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#maxreplicacount\n      maxReplicas: 1\n      # Minimum number of replicas KEDA will scale the resource down to.\n      # https://keda.sh/docs/2.7/concepts/scaling-deployments/#minreplicacount\n      minReplicas: 0\n      # If this property is set, KEDA will scale the resource down to this\n      # number of replicas.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#idlereplicacount\n      idleReplicas: 0\n      topics: # List of auto-generated Kafka Streams topics used by the streams app.\n        - topic1\n        - topic2\n
    "}, {"location": "user/core-concepts/defaults/#producerapp", "title": "ProducerApp", "text": "defaults.yaml
    \n
    "}, {"location": "user/core-concepts/defaults/#kafkaconnector", "title": "KafkaConnector", "text": "defaults.yaml
    # Kafka connector\n#\n# Parent of: KafkaSinkConnector, KafkaSourceConnector\n# Child of: PipelineComponent\nkafka-connector:\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example. Extensive documentation on\n  # connectors: https://kafka.apache.org/documentation/#connectconfigs\n  app: # required\n    tasks.max: 1\n  # Helm repository configuration for resetter\n  repo_config:\n    repository_name: my-repo # required\n    url: https://bakdata.github.io/kafka-connect-resetter/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.6\" # Helm chart version\n  # Overriding Kafka Connect Resetter Helm values. E.g. to override the\n  # Image Tag etc.\n  resetter_values:\n    imageTag: \"1.2.3\"\n
    "}, {"location": "user/core-concepts/defaults/#kafkasourceconnector", "title": "KafkaSourceConnector", "text": "defaults.yaml
    # Kafka source connector\n#\n# Child of: KafkaConnector\nkafka-source-connector:\n  # The source connector has no `from` section\n  # from:\n  # offset.storage.topic\n  # https://kafka.apache.org/documentation/#connect_running\n  offset_topic: offset_topic\n
    "}, {"location": "user/core-concepts/defaults/#kafkasinkconnector", "title": "KafkaSinkConnector", "text": "defaults.yaml
    # Kafka sink connector\n#\n# Child of: KafkaConnector\nkafka-sink-connector:\n  # No settings differ from `kafka-connector`\n
    "}, {"location": "user/core-concepts/components/helm-app/", "title": "HelmApp", "text": ""}, {"location": "user/core-concepts/components/helm-app/#usage", "title": "Usage", "text": "

    Can be used to deploy any app in Kubernetes using Helm, for example, a REST service that serves Kafka data.

    "}, {"location": "user/core-concepts/components/helm-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Kubernetes app managed through Helm with an associated Helm chart\n- type: helm-app\n  name: helm-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example.\n  app: # required\n    image: exampleImage # Example\n    debug: false # Example\n    commandLine: {} # Example\n  # Helm repository configuration (optional)\n  # If not set the helm repo add will not be called. Useful when using local Helm charts\n  repo_config:\n    repository_name: bakdata-streams-bootstrap # required\n    url: https://bakdata.github.io/streams-bootstrap/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.0\" # Helm chart version\n
    "}, {"location": "user/core-concepts/components/helm-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/helm-app/#deploy", "title": "deploy", "text": "

    Deploy using Helm.

    "}, {"location": "user/core-concepts/components/helm-app/#destroy", "title": "destroy", "text": "

    Uninstall Helm release.

    "}, {"location": "user/core-concepts/components/helm-app/#reset", "title": "reset", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/helm-app/#clean", "title": "clean", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kafka-app/", "title": "KafkaApp", "text": "

    Subclass of HelmApp.

    "}, {"location": "user/core-concepts/components/kafka-app/#usage", "title": "Usage", "text": "
    • Defines a streams-bootstrap component
    • Should not be used in pipeline.yaml as the component can be defined as either a StreamsApp or a ProducerApp
    • Often used in defaults.yaml
    "}, {"location": "user/core-concepts/components/kafka-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Base component for Kafka-based components.\n# Producer or streaming apps should inherit from this class.\n- type: kafka-app # required\n  name: kafka-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` can contain application-specific settings, hence  the user is free to\n  # add the key-value pairs they need.\n  app: # required\n    streams: # required\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n    nameOverride: override-with-this-name # kafka-app-specific\n    imageTag: \"1.0.0\" # Example values that are shared between streams-app and producer-app\n  # Helm repository configuration (optional)\n  # If not set the helm repo add will not be called. Useful when using local Helm charts\n  repo_config:\n    repository_name: bakdata-streams-bootstrap # required\n    url: https://bakdata.github.io/streams-bootstrap/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"2.12.0\" # Helm chart version\n
    "}, {"location": "user/core-concepts/components/kafka-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/kafka-app/#deploy", "title": "deploy", "text": "

    In addition to HelmApp's deploy:

    • Create topics if provided (optional)
    • Submit Avro schemas to the registry if provided (optional)
    "}, {"location": "user/core-concepts/components/kafka-app/#destroy", "title": "destroy", "text": "

    Uninstall Helm release.

    "}, {"location": "user/core-concepts/components/kafka-app/#reset", "title": "reset", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kafka-app/#clean", "title": "clean", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kafka-connector/", "title": "KafkaConnector", "text": "

    KafkaConnector is a component that deploys Kafka Connectors. Since a connector cannot be different from sink or source it is not recommended to use KafkaConnector for deployment in pipeline.yaml. Instead, KafkaConnector should be used in defaults.yaml to set defaults for all connectors in the pipeline as they can share some common settings.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/", "title": "KafkaSinkConnector", "text": "

    Subclass of KafkaConnector.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#usage", "title": "Usage", "text": "

    Lets other systems pull data from Apache Kafka.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Kafka sink connector\n- type: kafka-sink-connector\n  name: kafka-sink-connector # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example. Extensive documentation on\n  # connectors: https://kafka.apache.org/documentation/#connectconfigs\n  app: # required\n    tasks.max: 1\n  # Helm repository configuration for resetter\n  repo_config:\n    repository_name: my-repo # required\n    url: https://bakdata.github.io/kafka-connect-resetter/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.6\" # Helm chart version\n  # Overriding Kafka Connect Resetter Helm values. E.g. to override the\n  # Image Tag etc.\n  resetter_values:\n    imageTag: \"1.2.3\"\n
    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/kafka-sink-connector/#deploy", "title": "deploy", "text": "
    • Add the sink connector to the Kafka Connect cluster
    • Create the output topics if provided (optional)
    • Register schemas in the Schema Registry if provided (optional)
    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#destroy", "title": "destroy", "text": "

    The associated sink connector is removed from the Kafka Connect cluster.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#reset", "title": "reset", "text": "

    Reset the consumer group offsets using bakdata's sink resetter.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#clean", "title": "clean", "text": "
    • Delete associated consumer group
    • Delete configured error topics
    "}, {"location": "user/core-concepts/components/kafka-source-connector/", "title": "KafkaSourceConnector", "text": "

    Subclass of KafkaConnector.

    "}, {"location": "user/core-concepts/components/kafka-source-connector/#usage", "title": "Usage", "text": "

    Manages source connectors in your Kafka Connect cluster.

    "}, {"location": "user/core-concepts/components/kafka-source-connector/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Kafka source connector\n- type: kafka-source-connector # required\n  name: kafka-source-connector # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  # The source connector has no `from` section\n  # from:\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example. Extensive documentation on\n  # connectors: https://kafka.apache.org/documentation/#connectconfigs\n  app: # required\n    tasks.max: 1\n  # Helm repository configuration for resetter\n  repo_config:\n    repository_name: my-repo # required\n    url: https://bakdata.github.io/kafka-connect-resetter/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.6\" # Helm chart version\n  # Overriding Kafka Connect Resetter Helm values. E.g. to override the\n  # Image Tag etc.\n  resetter_values:\n    imageTag: \"1.2.3\"\n  # offset.storage.topic\n  # https://kafka.apache.org/documentation/#connect_running\n  offset_topic: offset_topic\n
    "}, {"location": "user/core-concepts/components/kafka-source-connector/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/kafka-source-connector/#deploy", "title": "deploy", "text": "
    • Add the source connector to the Kafka Connect cluster
    • Create the output topics if provided (optional)
    • Register schemas in the Schema registry if provided (optional)
    "}, {"location": "user/core-concepts/components/kafka-source-connector/#destroy", "title": "destroy", "text": "

    Remove the source connector from the Kafka Connect cluster.

    "}, {"location": "user/core-concepts/components/kafka-source-connector/#reset", "title": "reset", "text": "

    Delete state associated with the connector using bakdata's sink resetter.

    "}, {"location": "user/core-concepts/components/kafka-source-connector/#clean", "title": "clean", "text": "
    • Delete all associated output topics
    • Delete all associated schemas in the Schema Registry
    • Delete state associated with the connector
    "}, {"location": "user/core-concepts/components/kubernetes-app/", "title": "KubernetesApp", "text": ""}, {"location": "user/core-concepts/components/kubernetes-app/#usage", "title": "Usage", "text": "

    Can be used to create components for any Kubernetes app.

    "}, {"location": "user/core-concepts/components/kubernetes-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Base Kubernetes App\n- type: kubernetes-app\n  name: kubernetes-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example.\n  app: # required\n    image: exampleImage # Example\n    debug: false # Example\n    commandLine: {} # Example\n
    "}, {"location": "user/core-concepts/components/kubernetes-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/kubernetes-app/#deploy", "title": "deploy", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kubernetes-app/#destroy", "title": "destroy", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kubernetes-app/#reset", "title": "reset", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kubernetes-app/#clean", "title": "clean", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/overview/", "title": "Overview", "text": "

    This section explains the different components of KPOps, their usage and configuration in the pipeline definition pipeline.yaml.

    flowchart BT\n    KubernetesApp --> PipelineComponent\n    HelmApp --> KubernetesApp\n    KafkaApp --> HelmApp\n    StreamsApp --> KafkaApp\n    ProducerApp --> KafkaApp\n    KafkaConnector --> PipelineComponent\n    KafkaSourceConnector --> KafkaConnector\n    KafkaSinkConnector --> KafkaConnector\n\n    click KubernetesApp \"/kpops/user/core-concepts/components/kubernetes-app\"\n    click HelmApp \"/kpops/user/core-concepts/components/helm-app\"\n    click KafkaApp \"/kpops/user/core-concepts/components/kafka-app\"\n    click StreamsApp \"/kpops/user/core-concepts/components/streams-app\"\n    click ProducerApp \"/kpops/user/core-concepts/components/producer-app\"\n    click KafkaConnector \"/kpops/user/core-concepts/components/kafka-connector\"\n    click KafkaSourceConnector \"/kpops/user/core-concepts/components/kafka-source-connector\"\n    click KafkaSinkConnector \"/kpops/user/core-concepts/components/kafka-sink-connector\"

    KPOps component hierarchy

    "}, {"location": "user/core-concepts/components/producer-app/", "title": "ProducerApp", "text": "

    Subclass of KafkaApp.

    "}, {"location": "user/core-concepts/components/producer-app/#usage", "title": "Usage", "text": "

    Configures a streams-bootstrap Kafka producer app

    "}, {"location": "user/core-concepts/components/producer-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Holds configuration to use as values for the streams bootstrap producer-app Helm\n# chart.\n# More documentation on ProducerApp:\n# https://github.com/bakdata/streams-bootstrap\n- type: producer-app\n  name: producer-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  # from: # While the producer-app does inherit from kafka-app, it does not need a\n  # `from` section, hence it does not support it.\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # Allowed configs:\n  # https://github.com/bakdata/streams-bootstrap/tree/master/charts/producer-app\n  app: # required\n    streams: # required, producer-app-specific\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n      outputTopic: output_topic\n      extraOutputTopics:\n        output_role1: output_topic1\n        output_role2: output_topic2\n    nameOverride: override-with-this-name # kafka-app-specific\n  # Helm repository configuration (optional)\n  # If not set the helm repo add will not be called. Useful when using local Helm charts\n  repo_config:\n    repository_name: bakdata-streams-bootstrap # required\n    url: https://bakdata.github.io/streams-bootstrap/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"2.12.0\" # Helm chart version\n
    "}, {"location": "user/core-concepts/components/producer-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/producer-app/#deploy", "title": "deploy", "text": "

    In addition to KubernetesApp's deploy:

    • Create topics if provided (optional)
    • Submit Avro schemas to the registry if provided (optional)
    "}, {"location": "user/core-concepts/components/producer-app/#destroy", "title": "destroy", "text": "

    Uninstall Helm release.

    "}, {"location": "user/core-concepts/components/producer-app/#reset", "title": "reset", "text": "

    Do nothing, producers are stateless.

    "}, {"location": "user/core-concepts/components/producer-app/#clean", "title": "clean", "text": "
    • Delete the output topics of the Kafka producer
    • Delete all associated schemas in the Schema Registry
    "}, {"location": "user/core-concepts/components/streams-app/", "title": "StreamsApp", "text": "

    Subclass of KafkaApp.

    "}, {"location": "user/core-concepts/components/streams-app/#usage", "title": "Usage", "text": "

    Configures a streams-bootstrap Kafka Streams app

    "}, {"location": "user/core-concepts/components/streams-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # StreamsApp component that configures a streams bootstrap app.\n# More documentation on StreamsApp: https://github.com/bakdata/streams-bootstrap\n- type: streams-app # required\n  name: streams-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # No arbitrary keys are allowed under `app`here\n  # Allowed configs:\n  # https://github.com/bakdata/streams-bootstrap/tree/master/charts/streams-app\n  app: # required\n    # Streams Bootstrap streams section\n    streams: # required, streams-app-specific\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n      inputTopics:\n        - topic1\n        - topic2\n      outputTopic: output-topic\n      inputPattern: input-pattern\n      extraInputTopics:\n        input_role1:\n          - input_topic1\n          - input_topic2\n        input_role2:\n          - input_topic3\n          - input_topic4\n      extraInputPatterns:\n        pattern_role1: input_pattern1\n      extraOutputTopics:\n        output_role1: output_topic1\n        output_role2: output_topic2\n      errorTopic: error-topic\n      config:\n        my.streams.config: my.value\n    nameOverride: override-with-this-name # streams-app-specific\n    autoscaling: # streams-app-specific\n      consumerGroup: consumer-group # required\n      lagThreshold: 0 # Average target value to trigger scaling actions.\n      enabled: false # Whether to enable auto-scaling using KEDA.\n      # This is the interval to check each trigger on.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#pollinginterval\n      pollingInterval: 30\n      # The period to wait after the last trigger reported active before scaling\n      #  the resource back to 0. https://keda.sh/docs/2.9/concepts/scaling-deployments/#cooldownperiod\n      cooldownPeriod: 300\n      # The offset reset policy for the consumer if the the consumer group is\n      # not yet subscribed to a partition.\n      offsetResetPolicy: earliest\n      # This setting is passed to the HPA definition that KEDA will create for a\n      # given resource and holds the maximum number of replicas of the target resouce.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#maxreplicacount\n      maxReplicas: 1\n      # Minimum number of replicas KEDA will scale the resource down to.\n      # https://keda.sh/docs/2.7/concepts/scaling-deployments/#minreplicacount\n      minReplicas: 0\n      # If this property is set, KEDA will scale the resource down to this\n      # number of replicas.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#idlereplicacount\n      idleReplicas: 0\n      topics: # List of auto-generated Kafka Streams topics used by the streams app.\n        - topic1\n        - topic2\n  # Helm repository configuration (optional)\n  # If not set the helm repo add will not be called. Useful when using local Helm charts\n  repo_config:\n    repository_name: bakdata-streams-bootstrap # required\n    url: https://bakdata.github.io/streams-bootstrap/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"2.12.0\" # Helm chart version\n
    "}, {"location": "user/core-concepts/components/streams-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/streams-app/#deploy", "title": "deploy", "text": "

    In addition to KubernetesApp's deploy:

    • Create topics if provided (optional)
    • Submit Avro schemas to the registry if provided (optional)
    "}, {"location": "user/core-concepts/components/streams-app/#destroy", "title": "destroy", "text": "

    Uninstall Helm release.

    "}, {"location": "user/core-concepts/components/streams-app/#reset", "title": "reset", "text": "
    • Delete the consumer group offsets
    • Delete Kafka Streams state
    "}, {"location": "user/core-concepts/components/streams-app/#clean", "title": "clean", "text": "

    Similar to reset with to additional steps:

    • Delete the app's output topics
    • Delete all associated schemas in the Schema Registry
    "}, {"location": "user/core-concepts/variables/environment_variables/", "title": "Environment variables", "text": "

    Environment variables can be set by using the export command in Linux or the set command in Windows.

    dotenv files

    KPOps currently supports .env files only for variables related to the config. Full support for .env files is on the roadmap. One of the possible ways to use one and export the contents manually is with the following command: export $(xargs < .env). This would work in bash suppose there are no spaces inside the values.

    "}, {"location": "user/core-concepts/variables/environment_variables/#config", "title": "Config", "text": "

    These variables are a lower priority alternative to the settings in config.yaml. Variables marked as required can instead be set in the global config.

    Name Default Value Required Description Setting name KPOPS_DEFAULTS_PATH . False The path to the folder containing the defaults.yaml file and the environment defaults files. Paths can either be absolute or relative to config.yaml defaults_path KPOPS_COMPONENTS_MODULE False Custom Python module defining project-specific KPOps components components_module KPOPS_PIPELINE_BASE_DIR . False Base directory to the pipelines (default is current working directory) pipeline_base_dir KPOPS_KAFKA_BROKERS True The comma separated Kafka brokers address. kafka_brokers KPOPS_DEFAULTS_FILENAME_PREFIX defaults False The name of the defaults file and the prefix of the defaults environment file. defaults_filename_prefix KPOPS_TOPIC_NAME_CONFIG__DEFAULT_OUTPUT_TOPIC_NAME ${pipeline.name}-${component.name} False Configures the value for the variable ${output_topic_name} topic_name_config.default_output_topic_name KPOPS_TOPIC_NAME_CONFIG__DEFAULT_ERROR_TOPIC_NAME ${pipeline.name}-${component.name}-error False Configures the value for the variable ${error_topic_name} topic_name_config.default_error_topic_name KPOPS_SCHEMA_REGISTRY__ENABLED False False Whether the Schema Registry handler should be initialized. schema_registry.enabled KPOPS_SCHEMA_REGISTRY__URL http://localhost:8081/ False Address of the Schema Registry. schema_registry.url KPOPS_KAFKA_REST__URL http://localhost:8082/ False Address of the Kafka REST Proxy. kafka_rest.url KPOPS_KAFKA_CONNECT__URL http://localhost:8083/ False Address of Kafka Connect. kafka_connect.url KPOPS_TIMEOUT 300 False The timeout in seconds that specifies when actions like deletion or deploy timeout. timeout KPOPS_CREATE_NAMESPACE False False Flag for helm upgrade --install. Create the release namespace if not present. create_namespace KPOPS_HELM_CONFIG__CONTEXT False Name of kubeconfig context (--kube-context) helm_config.context KPOPS_HELM_CONFIG__DEBUG False False Run Helm in Debug mode helm_config.debug KPOPS_HELM_CONFIG__API_VERSION False Kubernetes API version used for Capabilities.APIVersions helm_config.api_version KPOPS_HELM_DIFF_CONFIG__IGNORE True Set of keys that should not be checked. helm_diff_config.ignore KPOPS_RETAIN_CLEAN_JOBS False False Whether to retain clean up jobs in the cluster or uninstall the, after completion. retain_clean_jobs config_env_vars.env Exhaustive list of all config-related environment variables
    # Global config environment variables\n#\n# The default setup is shown. These variables are a lower priority\n# alternative to the settings in `config.yaml`. Variables marked as\n# required can instead be set in the global config.\n#\n# defaults_path\n# The path to the folder containing the defaults.yaml file and the\n# environment defaults files. Paths can either be absolute or relative\n# to `config.yaml`\nKPOPS_DEFAULTS_PATH=.\n# components_module\n# Custom Python module defining project-specific KPOps components\nKPOPS_COMPONENTS_MODULE # No default value, not required\n# pipeline_base_dir\n# Base directory to the pipelines (default is current working\n# directory)\nKPOPS_PIPELINE_BASE_DIR=.\n# kafka_brokers\n# The comma separated Kafka brokers address.\nKPOPS_KAFKA_BROKERS # No default value, required\n# defaults_filename_prefix\n# The name of the defaults file and the prefix of the defaults\n# environment file.\nKPOPS_DEFAULTS_FILENAME_PREFIX=defaults\n# topic_name_config.default_output_topic_name\n# Configures the value for the variable ${output_topic_name}\nKPOPS_TOPIC_NAME_CONFIG__DEFAULT_OUTPUT_TOPIC_NAME=${pipeline.name}-${component.name}\n# topic_name_config.default_error_topic_name\n# Configures the value for the variable ${error_topic_name}\nKPOPS_TOPIC_NAME_CONFIG__DEFAULT_ERROR_TOPIC_NAME=${pipeline.name}-${component.name}-error\n# schema_registry.enabled\n# Whether the Schema Registry handler should be initialized.\nKPOPS_SCHEMA_REGISTRY__ENABLED=False\n# schema_registry.url\n# Address of the Schema Registry.\nKPOPS_SCHEMA_REGISTRY__URL=http://localhost:8081/\n# kafka_rest.url\n# Address of the Kafka REST Proxy.\nKPOPS_KAFKA_REST__URL=http://localhost:8082/\n# kafka_connect.url\n# Address of Kafka Connect.\nKPOPS_KAFKA_CONNECT__URL=http://localhost:8083/\n# timeout\n# The timeout in seconds that specifies when actions like deletion or\n# deploy timeout.\nKPOPS_TIMEOUT=300\n# create_namespace\n# Flag for `helm upgrade --install`. Create the release namespace if\n# not present.\nKPOPS_CREATE_NAMESPACE=False\n# helm_config.context\n# Name of kubeconfig context (`--kube-context`)\nKPOPS_HELM_CONFIG__CONTEXT # No default value, not required\n# helm_config.debug\n# Run Helm in Debug mode\nKPOPS_HELM_CONFIG__DEBUG=False\n# helm_config.api_version\n# Kubernetes API version used for Capabilities.APIVersions\nKPOPS_HELM_CONFIG__API_VERSION # No default value, not required\n# helm_diff_config.ignore\n# Set of keys that should not be checked.\nKPOPS_HELM_DIFF_CONFIG__IGNORE # No default value, required\n# retain_clean_jobs\n# Whether to retain clean up jobs in the cluster or uninstall the,\n# after completion.\nKPOPS_RETAIN_CLEAN_JOBS=False\n
    "}, {"location": "user/core-concepts/variables/environment_variables/#cli", "title": "CLI", "text": "

    These variables are a lower priority alternative to the commands' flags. If a variable is set, the corresponding flag does not have to be specified in commands. Variables marked as required can instead be set as flags.

    Name Default Value Required Description KPOPS_CONFIG_PATH . False Path to the dir containing config.yaml files KPOPS_DEFAULT_PATH False Path to defaults folder KPOPS_DOTENV_PATH False Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. KPOPS_ENVIRONMENT False The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). KPOPS_PIPELINE_PATH True Path to YAML with pipeline definition KPOPS_PIPELINE_STEPS False Comma separated list of steps to apply the command on cli_env_vars.env Exhaustive list of all cli-related environment variables
    # CLI Environment variables\n#\n# The default setup is shown. These variables are a lower priority\n# alternative to the commands' flags. If a variable is set, the\n# corresponding flag does not have to be specified in commands.\n# Variables marked as required can instead be set as flags.\n#\n# Path to the dir containing config.yaml files\nKPOPS_CONFIG_PATH=.\n# Path to defaults folder\nKPOPS_DEFAULT_PATH # No default value, not required\n# Path to dotenv file. Multiple files can be provided. The files will\n# be loaded in order, with each file overriding the previous one.\nKPOPS_DOTENV_PATH # No default value, not required\n# The environment you want to generate and deploy the pipeline to.\n# Suffix your environment files with this value (e.g.\n# defaults_development.yaml for environment=development).\nKPOPS_ENVIRONMENT # No default value, not required\n# Path to YAML with pipeline definition\nKPOPS_PIPELINE_PATH # No default value, required\n# Comma separated list of steps to apply the command on\nKPOPS_PIPELINE_STEPS # No default value, not required\n
    "}, {"location": "user/core-concepts/variables/substitution/", "title": "Substitution", "text": "

    KPOps supports the usage of placeholders and environment variables in pipeline definition and defaults.

    "}, {"location": "user/core-concepts/variables/substitution/#component-specific-variables", "title": "Component-specific variables", "text": "

    These variables can be used in a component's definition to refer to any of its attributes, including ones that the user has defined in the defaults.

    All of them are prefixed with component. and follow the following form: component.{attribute_name}. If the attribute itself contains attributes, they can be referred to like this: component.{attribute_name}.{subattribute_name}.

    Example
    - type: scheduled-producer\n  app:\n    labels:\n      app_type: \"${component.type}\"\n      app_name: \"${component.name}\"\n      app_schedule: \"${component.app.schedule}\"\n    commandLine:\n      FAKE_ARG: \"fake-arg-value\"\n    schedule: \"30 3/8 * * *\"\n- type: converter\n  app:\n    commandLine:\n      CONVERT_XML: true\n    resources:\n      limits:\n        memory: 2G\n      requests:\n        memory: 2G\n- type: filter\n  name: \"filter-app\"\n  app:\n    labels:\n      app_type: \"${component.type}\"\n      app_name: \"${component.name}\"\n      app_resources_requests_memory: \"${component.app.resources.requests.memory}\"\n      ${component.type}: \"${component.app.labels.app_name}-${component.app.labels.app_type}\"\n      test_placeholder_in_placeholder: \"${component.app.labels.${component.type}}\"\n    commandLine:\n      TYPE: \"nothing\"\n    resources:\n      requests:\n        memory: 3G\n    replicaCount: 4\n    autoscaling:\n      minReplicas: 4\n      maxReplicas: 4\n
    "}, {"location": "user/core-concepts/variables/substitution/#pipeline-config-specific-variables", "title": "Pipeline-config-specific variables", "text": "

    These variables include all fields in the config and refer to the pipeline configuration that is independent of the components.

    Info

    error_topic_name is an alias for topic_name_config.default_error_topic_name output_topic_name is an alias for topic_name_config.default_output_topic_name

    "}, {"location": "user/core-concepts/variables/substitution/#environment-variables", "title": "Environment variables", "text": "

    Environment variables such as $PATH can be used in the pipeline definition and defaults without any transformation following the form ${ENV_VAR_NAME}. This, of course, includes variables like the ones relevant to the KPOps cli that are exported by the user.

    See all KPOps environment variables

    "}, {"location": "user/core-concepts/variables/substitution/#pipeline-name-variables", "title": "Pipeline name variables", "text": "

    These are special variables that refer to the name and path of a pipeline.

    • ${pipeline.name}: Concatenated path of the parent directory where pipeline.yaml is defined in. For instance, ./data/pipelines/v1/pipeline.yaml, here the value for the variable would be data-pipelines-v1.

    • ${pipeline_name_<level>}: Similar to the previous variable, each <level> contains a part of the path to the pipeline.yaml file. Consider the previous example, ${pipeline_name_0} would be data, ${pipeline_name_1} would be pipelines, and ${pipeline_name_2} equals to v1.

    "}, {"location": "user/core-concepts/variables/substitution/#advanced-use-cases", "title": "Advanced use cases", "text": "
    1. Refer to default component field values: As long as a value is assigned to a component attribute, it is possible to refer to it with a placeholder. To see all component fields, take a look at the pipeline schema.
    2. Chaining variables: It is possible to chain any number of variables, see the example above.
    3. Cross-component substitution: YAML is quite an intricate language and with some of its magic one could write cross-component references.
    "}, {"location": "user/examples/atm-fraud-pipeline/", "title": "ATM fraud detection pipeline", "text": "

    ATM fraud is a demo pipeline for ATM fraud detection. The original by Confluent is written in KSQL and outlined in this blogpost. The one used in this example is re-built from scratch using bakdata's streams-bootstrap library.

    "}, {"location": "user/examples/atm-fraud-pipeline/#what-this-will-demonstrate", "title": "What this will demonstrate", "text": "
    • Deploying a PostgreSQL database using Helm
    • Deploying a pipeline using KPOps
    • Destroying a pipeline using KPOps
    "}, {"location": "user/examples/atm-fraud-pipeline/#prerequisites", "title": "Prerequisites", "text": "

    Completed all steps in the setup.

    "}, {"location": "user/examples/atm-fraud-pipeline/#setup-and-deployment", "title": "Setup and deployment", "text": ""}, {"location": "user/examples/atm-fraud-pipeline/#postgresql", "title": "PostgreSQL", "text": "

    Deploy PostgreSQL using the Bitnami Helm chart: Add the helm repository:

    helm repo add bitnami https://charts.bitnami.com/bitnami && \\\nhelm repo update\n

    Install the PostgreSQL with helm:

    helm upgrade --install -f ./postgresql.yaml \\\n--namespace kpops \\\npostgresql bitnami/postgresql\n
    PostgreSQL Example Helm chart values (postgresql.yaml)
    auth:\n  database: app_db  \n  enablePostgresUser: true\n  password: AppPassword\n  postgresPassword: StrongPassword\n  username: app1\nprimary:\n  persistence:\n    enabled: false\n    existingClaim: postgresql-data-claim\nvolumePermissions:\n  enabled: true\n
    "}, {"location": "user/examples/atm-fraud-pipeline/#atm-fraud-detection-example-pipeline-setup", "title": "ATM fraud detection example pipeline setup", "text": ""}, {"location": "user/examples/atm-fraud-pipeline/#port-forwarding", "title": "Port forwarding", "text": "

    Before we deploy the pipeline, we need to forward the ports of kafka-rest-proxy and kafka-connect. Run the following commands in two different terminals.

    kubectl port-forward --namespace kpops service/k8kafka-cp-rest 8082:8082\n
    kubectl port-forward --namespace kpops service/k8kafka-cp-kafka-connect 8083:8083\n
    "}, {"location": "user/examples/atm-fraud-pipeline/#deploying-the-atm-fraud-detection-pipeline", "title": "Deploying the ATM fraud detection pipeline", "text": "
    1. Export environment variables in your terminal:

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    2. Deploy the pipeline

      poetry run kpops deploy ./examples/bakdata/atm-fraud-detection/pipeline.yaml \\\n--pipeline-base-dir ./examples \\\n--config ./examples/bakdata/atm-fraud-detection/config.yaml \\\n--execute\n

    Note

    You can use the --dry-run flag instead of the --execute flag and check the logs if your pipeline will be deployed correctly.

    "}, {"location": "user/examples/atm-fraud-pipeline/#check-if-the-deployment-is-successful", "title": "Check if the deployment is successful", "text": "

    You can use the Streams Explorer to see the deployed pipeline. To do so, port-forward the service in a separate terminal session using the command below:

    kubectl port-forward -n kpops service/streams-explorer 8080:8080\n

    After that open http://localhost:8080 in your browser. You should be able to see pipeline shown in the image below:

    An overview of ATM fraud pipeline shown in Streams Explorer

    Attention

    Kafka Connect needs some time to set up the connector. Moreover, Streams Explorer needs a while to scrape the information from Kafka connect. Therefore, it might take a bit until you see the whole graph.

    "}, {"location": "user/examples/atm-fraud-pipeline/#teardown-resources", "title": "Teardown resources", "text": ""}, {"location": "user/examples/atm-fraud-pipeline/#postrgresql", "title": "PostrgreSQL", "text": "

    PostgreSQL can be uninstalled by running the following command:

    helm --namespace kpops uninstall postgresql\n
    "}, {"location": "user/examples/atm-fraud-pipeline/#atm-fraud-pipeline", "title": "ATM fraud pipeline", "text": "
    1. Export environment variables in your terminal.

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    2. Remove the pipeline

      poetry run kpops clean ./examples/bakdata/atm-fraud-detection/pipeline.yaml \\\n--pipeline-base-dir ./examples \\\n--config ./examples/bakdata/atm-fraud-detection/config.yaml \\\n--verbose \\\n--execute\n

    Note

    You can use the --dry-run flag instead of the --execute flag and check the logs if your pipeline will be destroyed correctly.

    Attention

    If you face any issues destroying this example see Teardown for manual deletion.

    "}, {"location": "user/examples/atm-fraud-pipeline/#common-errors", "title": "Common errors", "text": "
    • deploy fails:
    • Read the error message.
    • Try to correct the mistakes if there were any. Likely the configuration is not correct or the port-forwarding is not working as intended.
    • Run clean.
    • Run deploy --dry-run to avoid havig to clean again. If an error is dropped, start over from step 1.
    • If the dry-run is succesful, run deploy.
    • clean fails:
    • Read the error message.
    • Try to correct the indicated mistakes if there were any. Likely the configuration is not correct or the port-forwarding is not working as intended.
    • Run clean.
    • If clean fails, follow the steps in teardown.
    "}, {"location": "user/getting-started/quick-start/", "title": "Quick start", "text": ""}, {"location": "user/getting-started/quick-start/#word-count", "title": "Word-count", "text": "

    Word-count is a demo pipeline which consists of a producer producing words to Kafka, a Kafka streams app counting the number of times each word occurs and finally a Redis database into which the words are exported.

    "}, {"location": "user/getting-started/quick-start/#what-this-will-demonstrate", "title": "What this will demonstrate", "text": "
    • Deploying a Redis database using Helm
    • Deploying a pipeline using KPOps
    • Destroying a pipeline using KPOps
    "}, {"location": "user/getting-started/quick-start/#prerequisites", "title": "Prerequisites", "text": "

    Completed all steps in the setup.

    "}, {"location": "user/getting-started/quick-start/#setup-and-deployment", "title": "Setup and deployment", "text": ""}, {"location": "user/getting-started/quick-start/#redis", "title": "Redis", "text": "

    Deploy Redis using the Bitnami Helm chart: Add the Helm repository:

    helm repo add bitnami https://charts.bitnami.com/bitnami && \\\nhelm repo update\n

    Install Redis with Helm:

    helm upgrade --install -f ./values-redis.yaml \\\n--namespace kpops \\\nredis bitnami/redis\n
    Redis example Helm chart values (values-redis.yaml)
    architecture: standalone\nauth:\n  enabled: false\nmaster:\n  count: 1\n  configuration: \"databases 1\"\nimage:\n  tag: 7.0.8\n
    "}, {"location": "user/getting-started/quick-start/#word-count-example-pipeline-setup", "title": "Word-count example pipeline setup", "text": ""}, {"location": "user/getting-started/quick-start/#port-forwarding", "title": "Port forwarding", "text": "

    Before we deploy the pipeline, we need to forward the ports of kafka-rest-proxy and kafka-connect. Run the following commands in two different terminals.

    kubectl port-forward --namespace kpops service/k8kafka-cp-rest 8082:8082\n
    kubectl port-forward --namespace kpops service/k8kafka-cp-kafka-connect 8083:8083\n
    "}, {"location": "user/getting-started/quick-start/#deploying-the-word-count-pipeline", "title": "Deploying the Word-count pipeline", "text": "
    1. Copy the configuration from the kpops-examples repository into kpops>examples>bakdata>word-count like so:

      kpops\n\u251c\u2500\u2500 examples\n|   \u251c\u2500\u2500 bakdata\n|   |   \u251c\u2500\u2500 word-count\n|   |   |   \u251c\u2500\u2500 config.yaml\n|   |   |   \u251c\u2500\u2500 defaults\n|   |   |   \u2502\u00a0\u00a0 \u2514\u2500\u2500 defaults.yaml\n|   |   |   \u2514\u2500\u2500 pipeline.yaml\n|   |   |\n
    2. Export environment variables in your terminal:

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    3. Deploy the pipeline

      kpops deploy ./examples/bakdata/word-count/pipeline.yaml \\\n--pipeline-base-dir ./examples \\\n--config ./examples/bakdata/word-count/config.yaml \\\n--execute\n

    Note

    You can use the --dry-run flag instead of the --execute flag and check the logs if your pipeline will be deployed correctly.

    "}, {"location": "user/getting-started/quick-start/#check-if-the-deployment-is-successful", "title": "Check if the deployment is successful", "text": "

    You can use the Streams Explorer to inspect the deployed pipeline. To do so, port-forward the service in a separate terminal session using the command below:

    kubectl port-forward -n kpops service/streams-explorer 8080:8080\n

    After that open http://localhost:8080 in your browser.

    You should be able to see pipeline shown in the image below:

    An overview of Word-count pipeline shown in Streams Explorer

    Attention

    Kafka Connect needs some time to set up the connector. Moreover, Streams Explorer needs a while to scrape the information from Kafka Connect. Therefore, it might take a bit until you see the whole graph.

    "}, {"location": "user/getting-started/quick-start/#teardown-resources", "title": "Teardown resources", "text": ""}, {"location": "user/getting-started/quick-start/#redis_1", "title": "Redis", "text": "

    Redis can be uninstalled by running the following command:

    helm --namespace kpops uninstall redis\n
    "}, {"location": "user/getting-started/quick-start/#word-count-pipeline", "title": "Word-count pipeline", "text": "
    1. Export environment variables in your terminal.

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    2. Remove the pipeline

      kpops clean ./examples/bakdata/word-count/pipeline.yaml \\\n--pipeline-base-dir ./examples \\\n--config ./examples/bakdata/word-count/config.yaml \\\n--verbose \\\n--execute\n

    Note

    You can use the --dry-run flag instead of the --execute flag and check the logs if your pipeline will be destroyed correctly.

    Attention

    If you face any issues destroying this example see Teardown for manual deletion.

    "}, {"location": "user/getting-started/quick-start/#common-errors", "title": "Common errors", "text": "
    • deploy fails:
      1. Read the error message.
      2. Try to correct the mistakes if there were any. Likely the configuration is not correct or the port-forwarding is not working as intended.
      3. Run clean.
      4. Run deploy --dry-run to avoid having to clean again. If an error is dropped, start over from step 1.
      5. If the dry-run is successful, run deploy.
    • clean fails:
      1. Read the error message.
      2. Try to correct the indicated mistakes if there were any. Likely the configuration is not correct or the port-forwarding is not working as intended.
      3. Run clean.
      4. If clean fails, follow the steps in teardown.
    "}, {"location": "user/getting-started/setup/", "title": "Setup KPOps", "text": "

    In this part, you will set up KPOps. This includes:

    • optionally creating a local Kubernetes cluster
    • running Apache Kafka and Confluent's Schema Registry
    • installing KPOps
    "}, {"location": "user/getting-started/setup/#prerequisites", "title": "Prerequisites", "text": "
    • k3d (Version 5.4.6+) and Docker (Version >= v20.10.5) or an existing Kubernetes cluster (>= 1.21.0)
    • kubectl (Compatible with server version 1.21.0)
    • Helm (Version 3.8.0+)
    "}, {"location": "user/getting-started/setup/#setup-kubernetes-with-k3d", "title": "Setup Kubernetes with k3d", "text": "

    If you don't have access to an existing Kubernetes cluster, this section will guide you through creating a local cluster. We recommend the lightweight Kubernetes distribution k3s for this. k3d is a wrapper around k3s in Docker that lets you get started fast.

    1. You can install k3d with its installation script:

      wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/v5.4.6/install.sh | bash\n

      For other ways of installing k3d, you can have a look at their installation guide.

    2. The Kafka deployment needs a modified Docker image. In that case the image is built and pushed to a Docker registry that holds it. If you do not have access to an existing Docker registry, you can use k3d's Docker registry:

      k3d registry create kpops-registry.localhost --port 12345\n
    3. Now you can create a new cluster called kpops that uses the previously created Docker registry:

      k3d cluster create kpops --k3s-arg \"--no-deploy=traefik@server:*\" --registry-use k3d-kpops-registry.localhost:12345\n

    Note

    Creating a new k3d cluster automatically configures kubectl to connect to the local cluster by modifying your ~/.kube/config. In case you manually set the KUBECONFIG variable or don't want k3d to modify your config, k3d offers many other options.

    You can check the cluster status with kubectl get pods -n kube-system. If all returned elements have a STATUS of Running or Completed, then the cluster is up and running.

    "}, {"location": "user/getting-started/setup/#deploy-kafka", "title": "Deploy Kafka", "text": "

    Kafka is an open-source data streaming platform. More information about Kafka can be found in the documentation. To deploy Kafka, this guide uses Confluent's Helm chart.

    1. To allow connectivity to other systems Kafka Connect needs to be extended with drivers. You can install a JDBC driver for Kafka Connect by creating a new Docker image:

      1. Create a Dockerfile with the following content:

        FROM confluentinc/cp-kafka-connect:7.1.3\n\nRUN confluent-hub install --no-prompt confluentinc/kafka-connect-jdbc:10.6.0\n
      2. Build and push the modified image to your private Docker registry:

        docker build . --tag localhost:12345/kafka-connect-jdbc:7.1.3 && \\\ndocker push localhost:12345/kafka-connect-jdbc:7.1.3\n

      Detailed instructions on building, tagging and pushing a docker image can be found in Docker docs.

    2. Add Confluent's Helm chart repository and update the index:

      helm repo add confluentinc https://confluentinc.github.io/cp-helm-charts/ &&  \nhelm repo update\n
    3. Install Kafka, Zookeeper, Confluent's Schema Registry, Kafka Rest Proxy, and Kafka Connect. A single Helm chart installs all five components. Below you can find an example for the --values ./kafka.yaml file configuring the deployment accordingly. Deploy the services:

      helm upgrade \\\n    --install \\\n    --version 0.6.1 \\\n    --values ./kafka.yaml \\\n    --namespace kpops \\\n    --create-namespace \\\n    --wait \\\n    k8kafka confluentinc/cp-helm-charts\n
    Kafka Helm chart values (kafka.yaml)

    An example value configuration for Confluent's Helm chart. This configuration deploys a single Kafka Broker, a Schema Registry, Zookeeper, Kafka Rest Proxy, and Kafka Connect with minimal resources.

    cp-zookeeper:\n  enabled: true\n  servers: 1\n  imageTag: 7.1.3\n  heapOptions: \"-Xms124M -Xmx124M\"\n  overrideGroupId: k8kafka\n  fullnameOverride: \"k8kafka-cp-zookeeper\"\n  resources:\n    requests:\n      cpu: 50m\n      memory: 0.2G\n    limits:\n      cpu: 250m\n      memory: 0.2G\n  prometheus:\n    jmx:\n      enabled: false\n\ncp-kafka:\n  enabled: true\n  brokers: 1\n  imageTag: 7.1.3\n  podManagementPolicy: Parallel\n  configurationOverrides:\n    \"auto.create.topics.enable\": false\n    \"offsets.topic.replication.factor\": 1\n    \"transaction.state.log.replication.factor\": 1\n    \"transaction.state.log.min.isr\": 1\n    \"confluent.metrics.reporter.topic.replicas\": 1\n  resources:\n    requests:\n      cpu: 50m\n      memory: 0.5G\n    limits:\n      cpu: 250m\n      memory: 0.5G\n  prometheus:\n    jmx:\n      enabled: false\n  persistence:\n    enabled: false\n\ncp-schema-registry:\n  enabled: true\n  imageTag: 7.1.3\n  fullnameOverride: \"k8kafka-cp-schema-registry\"\n  overrideGroupId: k8kafka\n  kafka:\n    bootstrapServers: \"PLAINTEXT://k8kafka-cp-kafka-headless:9092\"\n  resources:\n    requests:\n      cpu: 50m\n      memory: 0.25G\n    limits:\n      cpu: 250m\n      memory: 0.25G\n  prometheus:\n    jmx:\n      enabled: false\n\ncp-kafka-connect:\n  enabled: true\n  replicaCount: 1\n  image: k3d-kpops-registry.localhost:12345/kafka-connect-jdbc\n  imageTag: 7.1.3\n  fullnameOverride: \"k8kafka-cp-kafka-connect\"\n  overrideGroupId: k8kafka\n  kafka:\n    bootstrapServers: \"PLAINTEXT://k8kafka-cp-kafka-headless:9092\"\n  heapOptions: \"-Xms256M -Xmx256M\"\n  resources:\n    requests:\n      cpu: 500m\n      memory: 0.25G\n    limits:\n      cpu: 500m\n      memory: 0.25G\n  configurationOverrides:\n    \"consumer.max.poll.records\": \"10\"\n    \"consumer.max.poll.interval.ms\": \"900000\"\n    \"config.storage.replication.factor\": \"1\"\n    \"offset.storage.replication.factor\": \"1\"\n    \"status.storage.replication.factor\": \"1\"\n  cp-schema-registry:\n    url: http://k8kafka-cp-schema-registry:8081\n  prometheus:\n    jmx:\n      enabled: false\n\ncp-kafka-rest:\n  enabled: true\n  imageTag: 7.1.3\n  fullnameOverride: \"k8kafka-cp-rest\"\n  heapOptions: \"-Xms256M -Xmx256M\"\n  resources:\n    requests:\n      cpu: 50m\n      memory: 0.25G\n    limits:\n      cpu: 250m\n      memory: 0.5G\n  prometheus:\n    jmx:\n      enabled: false\n\ncp-ksql-server:\n  enabled: false\ncp-control-center:\n  enabled: false\n
    "}, {"location": "user/getting-started/setup/#deploy-streams-explorer", "title": "Deploy Streams Explorer", "text": "

    Streams Explorer allows examining Apache Kafka data pipelines in a Kubernetes cluster including the inspection of schemas and monitoring of metrics. First, add the Helm repository:

    helm repo add streams-explorer https://bakdata.github.io/streams-explorer && \\\nhelm repo update\n

    Below you can find an example for the --values ./streams-explorer.yaml file configuring the deployment accordingly. Now, deploy the service:

    helm upgrade \\\n    --install \\\n    --version 0.2.3 \\\n    --values ./streams-explorer.yaml \\\n    --namespace kpops \\\n    streams-explorer streams-explorer/streams-explorer\n
    Streams Explorer Helm chart values (streams-explorer.yaml)

    An example value configuration for Steams Explorer Helm chart.

    imageTag: \"v2.1.2\"\nconfig:\n   K8S__deployment__cluster: true\n   SCHEMAREGISTRY__url: http://k8kafka-cp-schema-registry.kpops.svc.cluster.local:8081\n   KAFKACONNECT__url: http://k8kafka-cp-kafka-connect.kpops.svc.cluster.local:8083\nresources:\n   requests:\n       cpu: 200m\n       memory: 300Mi\n   limits:\n       cpu: 200m\n       memory: 300Mi\n
    "}, {"location": "user/getting-started/setup/#check-the-status-of-your-deployments", "title": "Check the status of your deployments", "text": "

    Now we will check if all the pods are running in our namespace. You can list all pods in the namespace with this command:

    kubectl --namespace kpops get pods\n

    Then you should see the following output in your terminal:

    NAME                                          READY   STATUS    RESTARTS   AGE\nk8kafka-cp-kafka-connect-8fc7d544f-8pjnt      1/1     Running   0          15m\nk8kafka-cp-zookeeper-0                        1/1     Running   0          15m\nk8kafka-cp-kafka-0                            1/1     Running   0          15m\nk8kafka-cp-schema-registry-588f8c65db-jdwbq   1/1     Running   0          15m\nk8kafka-cp-rest-6bbfd7b645-nwkf8              1/1     Running   0          15m\nstreams-explorer-54db878c67-s8wbz             1/1     Running   0          15m\n

    Pay attention to the STATUS row. The pods should have a status of Running.

    "}, {"location": "user/getting-started/setup/#install-kpops", "title": "Install KPOps", "text": "

    KPOps comes as a PyPI package. You can install it with pip:

    pip install kpops\n
    "}, {"location": "user/getting-started/teardown/", "title": "Teardown resources", "text": ""}, {"location": "user/getting-started/teardown/#kpops-teardown-commands", "title": "KPOps teardown commands", "text": "
    • destroy: Removes Kubernetes resources.
    • reset: Runs destroy, resets the states of Kafka Streams apps and resets offsets to zero.
    • clean: Runs reset and removes all Kafka resources.
    "}, {"location": "user/getting-started/teardown/#kpops-deployed-pipeline", "title": "KPOps-deployed pipeline", "text": "

    The kpops CLI can be used to destroy a pipeline that was previously deployed with KPOps. In case that doesn't work, the pipeline can always be taken down manually with helm (see section Infrastructure).

    1. Export environment variables.

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    2. Navigate to the examples folder. Replace the <name-of-the-example-directory> with the example you want to tear down. For example the atm-fraud-detection.

    3. Remove the pipeline

      # Uncomment 1 line to either destroy, reset or clean.\n\n# poetry run kpops destroy <name-of-the-example-directory>/pipeline.yaml \\\n# poetry run kpops reset <name-of-the-example-directory>/pipeline.yaml \\\n# poetry run kpops clean <name-of-the-example-directory>/pipeline.yaml \\\n--config <name-of-the-example-directory>/config.yaml \\\n--execute\n
    "}, {"location": "user/getting-started/teardown/#infrastructure", "title": "Infrastructure", "text": "

    Delete namespace:

    kubectl delete namespace kpops\n

    Note

    In case kpops destroy is not working one can uninstall the pipeline services one by one. This is equivalent to running kpops destroy. In case a clean uninstall (like the one kpops clean does) is needed, one needs to also delete the topics and schemas created by deployment of the pipeline.

    "}, {"location": "user/getting-started/teardown/#local-cluster", "title": "Local cluster", "text": "

    Delete local cluster:

    k3d cluster delete kpops\n
    "}, {"location": "user/getting-started/teardown/#local-image-registry", "title": "Local image registry", "text": "

    Delete local registry:

    k3d registry delete k3d-kpops-registry.localhost\n
    "}, {"location": "user/migration-guide/v1-v2/", "title": "Migrate from V1 to V2", "text": ""}, {"location": "user/migration-guide/v1-v2/#derive-component-type-automatically-from-class-name", "title": "Derive component type automatically from class name", "text": "

    KPOps automatically infers the component type from the class name. Therefore, the type and schema_type attributes can be removed from your custom components. By convention the type would be the lower, and kebab cased name of the class.

    class MyCoolStreamApp(StreamsApp):\n-    type = \"my-cool-stream-app\"\n+    ...\n

    Because of this new convention producer has been renamed to producer-app. This must be addressed in your pipeline.yaml and defaults.yaml.

    - producer:\n+ producer-app:\n    app:\n        streams:\n        outputTopic: output_topic\n        extraOutputTopics:\n            output_role1: output_topic1\n            output_role2: output_topic2\n
    "}, {"location": "user/migration-guide/v1-v2/#refactor-inputoutput-types", "title": "Refactor input/output types", "text": ""}, {"location": "user/migration-guide/v1-v2/#to-section", "title": "To section", "text": "

    In the to section these have changed:

    • The default type is output
    • If role is set, type is inferred to be extra
    • The type error needs to be defined explicitly
      to:\n    topics:\n      ${pipeline_name}-topic-1:\n-       type: extra\n        role: \"role-1\"\n        ...\n      ${pipeline_name}-topic-2:\n-       type: output\n        ...\n      ${pipeline_name}-topic-3:\n         type: error\n         ...\n
    "}, {"location": "user/migration-guide/v1-v2/#from-section", "title": "From section", "text": "

    In the from section these have changed:

    • The default type is input
    • input-pattern type is replaced by pattern
    • If role is set, type is inferred to be extra
    • If role is set, type is explicitly set to pattern, this would be inferred type extra-pattern
      from:\n    topics:\n      ${pipeline_name}-input-topic:\n-       type: input\n        ...\n      ${pipeline_name}-extra-topic:\n-       type: extra\n        role: topic-role\n        ...\n      ${pipeline_name}-input-pattern-topic:\n-       type: input-pattern\n+       type: pattern\n        ...\n      ${pipeline_name}-extra-pattern-topic:\n-       type: extra-pattern\n+       type: pattern\n        role: some-role\n        ...\n
    "}, {"location": "user/migration-guide/v1-v2/#remove-camel-case-conversion-of-internal-models", "title": "Remove camel case conversion of internal models", "text": "

    All the internal KPOps models are now snake_case, and only Helm/Kubernetes values require camel casing. You can find an example of a pipeline.yaml in the following. Notice that the app section here remains untouched.

    ...\ntype: streams-app\n  name: streams-app\n  namespace: namespace\n  app:\n    streams:\n      brokers: ${brokers}\n      schemaRegistryUrl: ${schema_registry_url}\n     autoscaling:\n      consumerGroup: consumer-group\n      lagThreshold: 0\n      enabled: false\n      pollingInterval: 30\n\n  to:\n    topics:\n      ${pipeline_name}-output-topic:\n        type: error\n-       keySchema: key-schema\n+       key_schema: key-schema\n-       valueSchema: value-schema\n+       value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs:\n          cleanup.policy: compact\n    models:\n      model: model\n  prefix: ${pipeline_name}-\n- repoConfig:\n+ repo_config:\n-   repositoryName: bakdata-streams-bootstrap\n+   repository_name: bakdata-streams-bootstrap\n    url: https://bakdata.github.io/streams-bootstrap/\n-   repoAuthFlags:\n+   repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.4\"\n...\n
    "}, {"location": "user/migration-guide/v1-v2/#refactor-handling-of-helm-flags", "title": "Refactor handling of Helm flags", "text": "

    If you are using the KubernetesApp class to define your own Kubernetes resource to deploy, the abstract function get_helm_chart that returns the chart for deploying the app using Helm is now a Python property and renamed to helm_chart.

    class MyCoolApp(KubernetesApp):\n\n+   @property\n    @override\n-   def get_helm_chart(self) -> str:\n+   def helm_chart(self) -> str:\n        return \"./charts/charts-folder\"\n
    "}, {"location": "user/migration-guide/v1-v2/#plural-broker-field-in-pipeline-config", "title": "Plural broker field in pipeline config", "text": "

    Since you can pass a comma separated string of broker address, the broker field in KPOps is now plural. The pluralization has affected multiple areas:

    "}, {"location": "user/migration-guide/v1-v2/#configyaml", "title": "config.yaml", "text": "
      environment: development\n- broker: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n+ brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n  kafka_connect_host: \"http://localhost:8083\"\n  kafka_rest_host: \"http://localhost:8082\"\n  schema_registry_url: \"http://localhost:8081\"\n
    "}, {"location": "user/migration-guide/v1-v2/#pipelineyaml-and-defaultyaml", "title": "pipeline.yaml and default.yaml", "text": "

    The variable is now called brokers.

    ...\n  app:\n    streams:\n-     brokers: ${broker}\n+     brokers: ${brokers}\n      schemaRegistryUrl: ${schema_registry_url}\n    nameOverride: override-with-this-name\n    imageTag: \"1.0.0\"\n...\n
    "}, {"location": "user/migration-guide/v1-v2/#environment-variable", "title": "Environment variable", "text": "

    Previously, if you set the environment variable KPOPS_KAFKA_BROKER, you need to replace that now with KPOPS_KAFKA_BROKERS.

    "}, {"location": "user/migration-guide/v2-v3/", "title": "Migrate from V2 to V3", "text": ""}, {"location": "user/migration-guide/v2-v3/#use-hash-and-trim-long-helm-release-names-instead-of-only-trimming", "title": "Use hash and trim long Helm release names instead of only trimming", "text": "

    KPOps handles long (more than 53 characters) Helm releases names differently. Helm will not find your (long) old release names anymore. Therefore, it is recommended that you should once destroy your pipeline with KPOps v2 to remove old Helm release names. After a clean destroy, re-deploy your pipeline with the KPOps v3.

    For example if you have a component with the Helm release name example-component-name-too-long-fake-fakefakefakefakefake. The new release name will shorten the original name to 52 characters and then replace the last 6 characters of the trimmed name with the first 5 characters of the result of SHA-1(helm_release_name).

    example-component-name-too-long-fake-fakefakef-0a7fc ----> 52 chars\n---------------------------------------------- -----\n  ^Shortened helm_release_name                 ^first 5 characters of SHA1(helm_release_name)\n
    "}, {"location": "user/migration-guide/v2-v3/#create-helmapp-component", "title": "Create HelmApp component", "text": "

    All Helm-specific parts of the built-in KubernetesApp have been extracted to a new child component that is more appropriately named HelmApp. It has to be renamed in your existing pipeline defintions and custom components module.

    "}, {"location": "user/migration-guide/v2-v3/#pipelineyaml", "title": "pipeline.yaml", "text": "
    -- type: kubernetes-app\n+- type: helm-app\n   name: foo\n
    "}, {"location": "user/migration-guide/v2-v3/#custom_modulepy", "title": "custom_module.py", "text": "
    - from kpops.components import KubernetesApp\n+ from kpops.components import HelmApp\n\n\n- class CustomHelmApp(KubernetesApp):\n+ class CustomHelmApp(HelmApp):\n      ...\n
    "}, {"location": "user/migration-guide/v2-v3/#make-kafka-rest-proxy-kafka-connect-hosts-default-and-improve-schema-registry-config", "title": "Make Kafka REST Proxy & Kafka Connect hosts default and improve Schema Registry config", "text": "

    The breaking changes target the config.yaml file:

    • The schema_registry_url is replaced with schema_registry.url (default http://localhost:8081) and schema_registry.enabled (default false).

    • kafka_rest_host is renamed to kafka_rest.url (default http://localhost:8082).

    • kafka_connect_host is replaced with kafka_connect.url (default http://localhost:8083).

    • brokers is renamed to kafka_brokers.

    The environment variable names of these config fields changed respectively. Please refer to the environment variables documentation page to see the newest changes.

    "}, {"location": "user/migration-guide/v2-v3/#configyaml", "title": "config.yaml", "text": "
      environment: development\n- brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n- kafka_rest_host: \"http://my-custom-rest.url:8082\"\n- kafka_connect_host: \"http://my-custom-connect.url:8083\"\n- schema_registry_url: \"http://my-custom-sr.url:8081\"\n+ kafka_brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n+ kafka_rest:\n+   url: \"http://my-custom-rest.url:8082\"\n+ kafka_connect:\n+   url: \"http://my-custom-connect.url:8083\"\n+ schema_registry:\n+   enabled: true\n+   url: \"http://my-custom-sr.url:8081\"\n
    "}, {"location": "user/migration-guide/v2-v3/#pipelineyaml-and-defaultyaml", "title": "pipeline.yaml and default.yaml", "text": "

    The variable is now called kafka_brokers.

    ...\n  app:\n    streams:\n-     brokers: ${brokers}\n+     brokers: ${kafka_brokers}\n      schemaRegistryUrl: ${schema_registry_url}\n    nameOverride: override-with-this-name\n    imageTag: \"1.0.0\"\n...\n
    "}, {"location": "user/migration-guide/v2-v3/#define-custom-components-module-pipeline-base-dir-globally", "title": "Define custom components module & pipeline base dir globally", "text": "

    Warning

    The previous CLI parameters have been removed.

    The options for a custom components_module and pipeline_base_dir are now global settings, defined in config.yaml.

    "}, {"location": "user/migration-guide/v2-v3/#configyaml_1", "title": "config.yaml", "text": "
      kafka_brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n  environment: development\n+ components_module: components\n+ pipeline_base_dir: pipelines\n
    "}, {"location": "user/migration-guide/v2-v3/#move-github-action-to-repsitory-root", "title": "Move GitHub action to repsitory root", "text": "

    The location of the GitHub action has changed, and it's now available directly as bakdata/kpops.

    You'll need to change it in your GitHub CI workflows.

    steps:\n  - name: kpops deploy\n-   uses: bakdata/kpops/actions/kpops-runner@main\n+   uses: bakdata/kpops@main\n    with:\n      command: deploy --execute\n      # ...\n
    "}, {"location": "user/migration-guide/v2-v3/#allow-overriding-config-files", "title": "Allow overriding config files", "text": "

    Specifying the environment is no longer mandatory. If not defined, only the global files will be used.

    environment is no longer specified in config.yaml. Instead, it can be either set via the CLI flag --environment or with the environment variable KPOPS_ENVIRONMENT.

    The --config flag in the CLI now points to the directory that contains config*.yaml files. The files to be used are resolved based on the provided (or not) environment.

    "}, {"location": "user/migration-guide/v2-v3/#configyaml_2", "title": "config.yaml", "text": "
    - environment: development\n  kafka_brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n  schema_registry:\n    enabled: true\n    url: \"http://my-custom-sr.url:8081\"\n
    "}, {"location": "user/migration-guide/v2-v3/#change-substitution-variables-separator-to", "title": "Change substitution variables separator to .", "text": "

    The delimiter in the substitution variables is changed to ..

    "}, {"location": "user/migration-guide/v2-v3/#pipelineyaml-and-defaultyaml_1", "title": "pipeline.yaml and default.yaml", "text": "
    steps:\n  - type: scheduled-producer\n    app:\n      labels:\n-       app_type: \"${component_type}\"\n-       app_name: \"${component_name}\"\n-       app_schedule: \"${component_app_schedule}\"\n+       app_type: \"${component.type}\"\n+       app_name: \"${component.name}\"\n+       app_schedule: \"${component.app.schedule}\"\n
    "}, {"location": "user/migration-guide/v2-v3/#configyaml_3", "title": "config.yaml", "text": "
    topic_name_config:\n- default_error_topic_name: \"${pipeline_name}-${component_name}-dead-letter-topic\"\n- default_output_topic_name: \"${pipeline_name}-${component_name}-topic\"\n+ default_error_topic_name: \"${pipeline_name}-${component.name}-dead-letter-topic\"\n+ default_output_topic_name: \"${pipeline_name}-${component.name}-topic\"\n
    "}, {"location": "user/migration-guide/v2-v3/#refactor-generate-template-for-python-api-usage", "title": "Refactor generate template for Python API usage", "text": "

    The template method of every pipeline component has been renamed to manifest as it is no longer strictly tied to Helm template. Instead, it can be used to render the final resources of a component, such as Kubernetes manifests.

    There is also a new kpops manifest command replacing the existing kpops generate --template flag.

    If you're using this functionality in your custom components, it needs to be updated.

      from kpops.components.base_components.models.resource import Resource\n\n  @override\n- def template(self) -> None:\n+ def manifest(self) -> Resource:\n  \"\"\"Render final component resources, e.g. Kubernetes manifests.\"\"\"\n      return []  # list of manifests\n
    "}, {"location": "user/migration-guide/v2-v3/#namespace-substitution-vars", "title": "Namespace substitution vars", "text": "

    The global configuration variables are now namespaced under the config key, such as ${config.kafka_brokers}, ${config.schema_registry.url}. Same with pipeline variables, e.g. ${pipeline_name} \u2192 ${pipeline.name}. This would make it more uniform with the existing ${component.<key>} variables.

    "}, {"location": "user/migration-guide/v2-v3/#pipelineyaml_1", "title": "pipeline.yaml", "text": "
      name: kafka-app\n- prefix: ${pipeline_name}-\n+ prefix: ${pipeline.name}-\n  app:\n    streams:\n-     brokers: ${kafka_brokers}\n-     schemaRegistryUrl: ${schema_registry.url}\n+     brokers: ${config.kafka_brokers}\n+     schemaRegistryUrl: ${config.schema_registry.url}\n
    "}, {"location": "user/references/cli-commands/", "title": "CLI Usage", "text": "

    Usage:

    $ kpops [OPTIONS] COMMAND [ARGS]...\n

    Options:

    • -V, --version: Print KPOps version
    • --install-completion: Install completion for the current shell.
    • --show-completion: Show completion for the current shell, to copy it or customize the installation.
    • --help: Show this message and exit.

    Commands:

    • clean: Clean pipeline steps
    • deploy: Deploy pipeline steps
    • destroy: Destroy pipeline steps
    • generate: Generate enriched pipeline representation
    • manifest: Render final resource representation
    • reset: Reset pipeline steps
    • schema: Generate JSON schema.
    "}, {"location": "user/references/cli-commands/#kpops-clean", "title": "kpops clean", "text": "

    Clean pipeline steps

    Usage:

    $ kpops clean [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --dry-run / --execute: Whether to dry run the command or execute it [default: dry-run]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --parallel / --no-parallel: Run the command in parallel [default: no-parallel]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-deploy", "title": "kpops deploy", "text": "

    Deploy pipeline steps

    Usage:

    $ kpops deploy [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --dry-run / --execute: Whether to dry run the command or execute it [default: dry-run]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --parallel / --no-parallel: Run the command in parallel [default: no-parallel]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-destroy", "title": "kpops destroy", "text": "

    Destroy pipeline steps

    Usage:

    $ kpops destroy [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --dry-run / --execute: Whether to dry run the command or execute it [default: dry-run]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --parallel / --no-parallel: Run the command in parallel [default: no-parallel]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-generate", "title": "kpops generate", "text": "

    Enrich pipeline steps with defaults. The enriched pipeline is used for all KPOps operations (deploy, destroy, ...).

    Usage:

    $ kpops generate [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --output / --no-output: Enable output printing [default: output]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-manifest", "title": "kpops manifest", "text": "

    In addition to generate, render final resource representation for each pipeline step, e.g. Kubernetes manifests.

    Usage:

    $ kpops manifest [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --output / --no-output: Enable output printing [default: output]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-reset", "title": "kpops reset", "text": "

    Reset pipeline steps

    Usage:

    $ kpops reset [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --dry-run / --execute: Whether to dry run the command or execute it [default: dry-run]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --parallel / --no-parallel: Run the command in parallel [default: no-parallel]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-schema", "title": "kpops schema", "text": "

    Generate JSON schema.

    The schemas can be used to enable support for KPOps files in a text editor.

    Usage:

    $ kpops schema [OPTIONS] SCOPE:{pipeline|defaults|config}\n

    Arguments:

    • SCOPE:{pipeline|defaults|config}: Scope of the generated schema
      pipeline: Schema of PipelineComponents. Includes the built-in KPOps components by default. To include custom components, provide components module in config.\n\nconfig: Schema of KpopsConfig.  [required]\n

    Options:

    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --include-stock-components / --no-include-stock-components: Include the built-in KPOps components. [default: include-stock-components]
    • --help: Show this message and exit.
    "}, {"location": "user/references/editor-integration/", "title": "Editor integration", "text": "

    KPOps provides JSON schemas that enable autocompletion and validation for all YAML files that the user must work with.

    "}, {"location": "user/references/editor-integration/#supported-files", "title": "Supported files", "text": "
    • pipeline.yaml
    • defaults.yaml
    • config.yaml
    "}, {"location": "user/references/editor-integration/#usage", "title": "Usage", "text": "
    1. Install the yaml-language-server in your editor of choice. (requires LSP support)
    2. Configure the extension with the settings below.
    settings.json
    {\n    \"yaml.schemas\": {\n        \"https://bakdata.github.io/kpops/3.0/schema/pipeline.json\": [\n            \"pipeline.yaml\",\n            \"pipeline_*.yaml\"\n        ],\n        \"https://bakdata.github.io/kpops/3.0/schema/defaults.json\": [\n            \"defaults.yaml\",\n            \"defaults_*.yaml\"\n        ],\n        \"https://bakdata.github.io/kpops/3.0/schema/config.json\": [\n            \"config.yaml\",\n            \"config_*.yaml\"\n        ]\n    }\n}\n

    Advanced usage

    It is possible to generate schemas with the kpops schema command. Useful for including custom components or when using a pre-release version of KPOps.

    "}, {"location": "user/references/ci-integration/github-actions/", "title": "GitHub Actions integration", "text": "

    We provided a GitHub composite action bakdata/kpops that installs and executes KPOps commands with the given parameters.

    "}, {"location": "user/references/ci-integration/github-actions/#input-parameters", "title": "Input Parameters", "text": "Name Required Default Value Type Description command \u2705 - string KPOps command to run. generate, deploy, destroy, reset, clean are possible values. Flags such as --dry-run and --execute need to be specified pipeline \u2705 - string Pipeline to run by KPOps working-directory \u274c . string root directory used by KPOps to run pipelines defaults \u274c - string defaults folder path config \u274c - string Directory containing the config*.yaml file(s) environment \u274c - string Environment to run KPOps in components \u274c - string components package path filter-type \u274c - string Whether to include/exclude the steps defined in KPOPS_PIPELINE_STEPS python-version \u274c \"3.11.x\" string Python version to install (Defaults to the latest stable version of Python 3.11) kpops-version \u274c latest string KPOps version to install helm-version \u274c latest string Helm version to install token \u274c latest string secrets.GITHUB_TOKEN, needed for setup-helm action if helm-version is set to latest"}, {"location": "user/references/ci-integration/github-actions/#usage", "title": "Usage", "text": "
    steps:\n  # ...\n  # This step is useful for debugging reasons\n  - name: Generate Kafka pipeline\n    uses: bakdata/kpops@main\n    with:\n      command: generate\n      working-directory: home/my-kpops-root-dir\n      pipeline: pipelines/my-pipeline-file.yaml\n      kpops-version: 1.2.3\n\n  # It is possible to use a pre-release KPOps version from TestPyPI https://test.pypi.org/project/kpops/#history\n  - name: Deploy Kafka pipeline\n    uses: bakdata/kpops@main\n    with:\n      command: deploy --execute\n      working-directory: home/my-kpops-root-dir\n      pipeline: pipelines/my-pipeline-file.yaml\n      kpops-version:  1.2.5.dev20230707132709\n  # ...\n
    "}]} \ No newline at end of file +{"config": {"lang": ["en"], "separator": "[\\s\\-]+", "pipeline": ["stopWordFilter"]}, "docs": [{"location": "developer/auto-generation/", "title": "Auto generation", "text": "

    Auto generation happens mostly with pre-commit hooks. You can find the pre-commit configuration here. These pre-commit hooks call different Python scripts to auto generate code for the documentation.

    "}, {"location": "developer/auto-generation/#generation-scripts-and-their-respective-files", "title": "Generation scripts and their respective files", "text": ""}, {"location": "developer/auto-generation/#documentation", "title": "Documentation", "text": ""}, {"location": "developer/auto-generation/#variables", "title": "Variables", "text": "
    • cli_env_vars.env -- All CLI environment variables in a dotenv file.
    • cli_env_vars.md -- All CLI environment variables in a table.
    • config_env_vars.env -- Almost all pipeline config environment variables in a dotenv file. The script checks for each field in KpopsConfig whether it has an env attribute defined. The script is currently unable to visit the classes of fields like topic_name_config, hence any environment variables defined there would remain unknown to it.
    • config_env_vars.env -- Almost all pipeline config environment variables in a table.
    • variable_substitution.yaml -- A copy of ./tests/pipeline/resources/component-type-substitution/pipeline.yaml used as an example of substitution.
    "}, {"location": "developer/auto-generation/#cli-commands", "title": "CLI commands", "text": "

    Generated by typer-cli from the code in main.py. It is called with Python's subprocess module.

    "}, {"location": "developer/auto-generation/#pipeline-and-defaults-example-definitions", "title": "Pipeline and defaults example definitions", "text": "

    Generates example pipeline.yaml and defaults.yaml for each individual component, stores them and also concatenates them into 1 big pipeline definition and 1 big pipeline defaults definition.

    User input

    • headers/*\\.yaml -- The top of each example. Includes a description comment, type and name. The headers for pipeline.yaml reside in the pipeline-components dir and the defaults.yaml headers reside in the pipeline-defaults dir. The names of the files must be equal to the respective component type.
    • sections/*\\.yaml -- Each YAML file contains a single section (component attribute) definition. The intention is to keep the minimal set of definitions there from which any component definition can be built. The names of the files must be equal to the respective component type and the attribute name. The sections are used for both defaults.yaml and pipeline.yaml generation and reside in the pipeline-components dir.

    Generated

    • pipeline-components/dependencies/* Cached information about KPOps components
    • pipeline_component_dependencies.yaml -- Specifies per component which files in the sections dir should be used for the pipeline.yaml generation.
    • defaults_pipeline_component_dependencies.yaml -- Specifies per component which files in the sections dir should be used for the defaults.yaml generation.
    • kpops_structure.yaml -- Specifies the inheritance hierarchy of the components and what sections exist in each component.
    • pipeline-components/*\\.yaml -- All single-component pipeline definitions and one big (complete) pipeline.yaml that contains all of them.
    • pipeline-defaults/*\\.yaml -- All single-component defaults definitions and one big (complete) defaults.yaml that contains all of them.
    "}, {"location": "developer/auto-generation/#editor-integration", "title": "Editor integration", "text": ""}, {"location": "developer/auto-generation/#schemas", "title": "Schemas", "text": "
    • config.json
    • pipeline.json
    "}, {"location": "developer/contributing/", "title": "How to contribute", "text": "

    Welcome! We are glad to have you visit our contributing guide!

    If you find any bugs or have suggestions for improvements, please open an issue and optionally a pull request (PR). In the case of a PR, we would appreciate it if you preface it with an issue outlining your goal and means of achieving it.

    "}, {"location": "developer/contributing/#style", "title": "Style", "text": "

    We advise that you stick to our pre-commit hooks for code linting, formatting, and auto-generation of documentation. After you install them using poetry run pre-commit install they're triggered automatically during git commit. Additionally, you can manually invoke them with poetry run pre-commit run -a. In order for dprint to work, you have to manually install it locally. It will work in the CI, so it is also possible to manually carry out formatting changes flagged by dprint in the CI and skip installing it locally.

    "}, {"location": "developer/contributing/#python", "title": "Python", "text": "

    To ensure a consistent Python code style, we use Ruff for both linting and formatting. The official docs contain a guide on editor integration.

    Our configuration can be found in KPOps' top-level pyproject.toml.

    "}, {"location": "developer/contributing/#markdown", "title": "Markdown", "text": "

    To ensure a consistent markdown style, we use dprint's Markdown code formatter. Our configuration can be found here.

    "}, {"location": "developer/contributing/#css", "title": "CSS", "text": "

    To ensure a consistent CSS style, we use the malva dprint's plugin. Our configuration can be found here.

    "}, {"location": "developer/contributing/#toml", "title": "TOML", "text": "

    To ensure a consistent TOML style, we use dprint's TOML code formatter. Our configuration can be found here.

    "}, {"location": "developer/getting-started/", "title": "Getting started", "text": "

    Welcome! We are glad to have you visit our developer guide! If you find any bugs or have suggestions for improvements, please open an issue and optionally a pull request (PR). In the case of a PR, we would appreciate it if you preface it with an issue outlining your goal and means of achieving it.

    Find more about our code-style or insights into KPOps' code base here in our developer guide.

    Work in progress

    The developer guide is still under construction. If you have a question left unanswered here, feel free to ask it by opening an issue.

    "}, {"location": "user/changelog/", "title": "Changelog", "text": ""}, {"location": "user/changelog/#2011-release-date-2023-10-24", "title": "2.0.11 - Release Date: [2023-10-24]", "text": ""}, {"location": "user/changelog/#fixes", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix early exit upon Helm exit code 1 - #376

    • Fix docs setup page list indentation - #377

    "}, {"location": "user/changelog/#documentation", "title": "\ud83d\udcdd Documentation", "text": "
    • Migrate deprecated mkdocs-material-extensions - #378

    • Fix docs setup page list indentation - #377

    • Exclude resources from docs search - #371

    "}, {"location": "user/changelog/#2010-release-date-2023-10-12", "title": "2.0.10 - Release Date: [2023-10-12]", "text": ""}, {"location": "user/changelog/#miscellaneous", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Fix environment variables documentation generation - #362

    • Introduce ruff - #363

    • Print details on connector name mismatch error - #369

    • Enable transparent OS environment lookups from internal environment - #368

    "}, {"location": "user/changelog/#209-release-date-2023-09-19", "title": "2.0.9 - Release Date: [2023-09-19]", "text": ""}, {"location": "user/changelog/#fixes_1", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix Kafka connect config name for deletion - #361
    "}, {"location": "user/changelog/#documentation_1", "title": "\ud83d\udcdd Documentation", "text": "
    • Fix link to kpops-examples - #357
    "}, {"location": "user/changelog/#208-release-date-2023-09-06", "title": "2.0.8 - Release Date: [2023-09-06]", "text": ""}, {"location": "user/changelog/#fixes_2", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix config.yaml overriding environment variables - #353
    "}, {"location": "user/changelog/#refactor", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor component prefix & name - #326

    • Remove unnecessary condition during inflate - #328

    "}, {"location": "user/changelog/#207-release-date-2023-08-31", "title": "2.0.7 - Release Date: [2023-08-31]", "text": ""}, {"location": "user/changelog/#fixes_3", "title": "\ud83d\udc1b Fixes", "text": "
    • Print only rendered templates when --template flag is set - #350
    "}, {"location": "user/changelog/#documentation_2", "title": "\ud83d\udcdd Documentation", "text": "
    • Add migration guide - #352
    "}, {"location": "user/changelog/#206-release-date-2023-08-30", "title": "2.0.6 - Release Date: [2023-08-30]", "text": ""}, {"location": "user/changelog/#refactor_1", "title": "\ud83c\udfed Refactor", "text": "
    • Simplify deployment with local Helm charts - #349
    "}, {"location": "user/changelog/#205-release-date-2023-08-30", "title": "2.0.5 - Release Date: [2023-08-30]", "text": ""}, {"location": "user/changelog/#fixes_4", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix versioning of docs when releasing - #346
    "}, {"location": "user/changelog/#204-release-date-2023-08-29", "title": "2.0.4 - Release Date: [2023-08-29]", "text": ""}, {"location": "user/changelog/#fixes_5", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix GitHub ref variable for pushing docs to main branch - #343
    "}, {"location": "user/changelog/#documentation_3", "title": "\ud83d\udcdd Documentation", "text": "
    • Add dprint as the markdown formatter - #337

    • Publish pre-release docs for PRs & main branch - #339

    • Align docs colours - #345

    "}, {"location": "user/changelog/#miscellaneous_1", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Exclude abstract components from pipeline schema - #332
    "}, {"location": "user/changelog/#203-release-date-2023-08-24", "title": "2.0.3 - Release Date: [2023-08-24]", "text": ""}, {"location": "user/changelog/#fixes_6", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix GitHub action error in non-Python projects - #340
    "}, {"location": "user/changelog/#miscellaneous_2", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Lint GitHub action - #342
    "}, {"location": "user/changelog/#202-release-date-2023-08-23", "title": "2.0.2 - Release Date: [2023-08-23]", "text": ""}, {"location": "user/changelog/#documentation_4", "title": "\ud83d\udcdd Documentation", "text": "
    • Add version dropdown to the documentation - #336

    • Break the documentation down into smaller subsection - #329

    "}, {"location": "user/changelog/#201-release-date-2023-08-22", "title": "2.0.1 - Release Date: [2023-08-22]", "text": ""}, {"location": "user/changelog/#fixes_7", "title": "\ud83d\udc1b Fixes", "text": "
    • Fix optional flags in GitHub action - #334
    "}, {"location": "user/changelog/#200-release-date-2023-08-17", "title": "2.0.0 - Release Date: [2023-08-17]", "text": ""}, {"location": "user/changelog/#breaking-changes", "title": "\ud83c\udfd7\ufe0f Breaking changes", "text": "
    • Remove camel case conversion of internal models - #308

    • Derive component type automatically from class name - #309

    • Refactor input/output types - #232

    • v2 - #321

    "}, {"location": "user/changelog/#features", "title": "\ud83d\ude80 Features", "text": "
    • Automatically support schema generation for custom components - #307

    • Derive component type automatically from class name - #309

    "}, {"location": "user/changelog/#refactor_2", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor input/output types - #232
    "}, {"location": "user/changelog/#documentation_5", "title": "\ud83d\udcdd Documentation", "text": "
    • Fix editor integration example in docs - #273
    "}, {"location": "user/changelog/#172-release-date-2023-08-16", "title": "1.7.2 - Release Date: [2023-08-16]", "text": ""}, {"location": "user/changelog/#refactor_3", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor Kafka Connect handler - #322
    "}, {"location": "user/changelog/#documentation_6", "title": "\ud83d\udcdd Documentation", "text": "
    • Add KPOps Runner GitHub Action to the documentation - #325

    • Remove :type and :rtype from docstrings - #324

    "}, {"location": "user/changelog/#171-release-date-2023-08-15", "title": "1.7.1 - Release Date: [2023-08-15]", "text": ""}, {"location": "user/changelog/#documentation_7", "title": "\ud83d\udcdd Documentation", "text": "
    • Modularize and autogenerate examples for the documentation - #267

    • Update the variable documentation - #266

    "}, {"location": "user/changelog/#170-release-date-2023-08-15", "title": "1.7.0 - Release Date: [2023-08-15]", "text": ""}, {"location": "user/changelog/#features_1", "title": "\ud83d\ude80 Features", "text": "
    • Add flag to exclude pipeline steps - #300
    "}, {"location": "user/changelog/#160-release-date-2023-08-10", "title": "1.6.0 - Release Date: [2023-08-10]", "text": ""}, {"location": "user/changelog/#refactor_4", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor handling of Helm flags - #319
    "}, {"location": "user/changelog/#150-release-date-2023-08-10", "title": "1.5.0 - Release Date: [2023-08-10]", "text": ""}, {"location": "user/changelog/#features_2", "title": "\ud83d\ude80 Features", "text": "
    • Refactor Helm wrapper and add --set-file flag - #311
    "}, {"location": "user/changelog/#refactor_5", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor Helm wrapper and add --set-file flag - #311

    • Set default for ToSection topics - #313

    • Annotate types for ToSection models mapping - #315

    "}, {"location": "user/changelog/#miscellaneous_3", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Check Poetry lock file consistency - #316
    "}, {"location": "user/changelog/#140-release-date-2023-08-02", "title": "1.4.0 - Release Date: [2023-08-02]", "text": ""}, {"location": "user/changelog/#fixes_8", "title": "\ud83d\udc1b Fixes", "text": "
    • Validate unique step names - #292
    "}, {"location": "user/changelog/#refactor_6", "title": "\ud83c\udfed Refactor", "text": "
    • Order PipelineComponent fields - #290

    • Migrate requests to httpx - #302

    • Refactor CLI using dtyper - #306

    "}, {"location": "user/changelog/#miscellaneous_4", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Update Black - #294

    • Fix vulnerability in mkdocs-material - #295

    • Move breaking changes section upper in the change log config - #287

    "}, {"location": "user/changelog/#132-release-date-2023-07-13", "title": "1.3.2 - Release Date: [2023-07-13]", "text": ""}, {"location": "user/changelog/#fixes_9", "title": "\ud83d\udc1b Fixes", "text": "
    • Exclude Helm tests from dry-run diff - #293
    "}, {"location": "user/changelog/#131-release-date-2023-07-11", "title": "1.3.1 - Release Date: [2023-07-11]", "text": ""}, {"location": "user/changelog/#refactor_7", "title": "\ud83c\udfed Refactor", "text": "
    • Remove workaround for pipeline steps - #276
    "}, {"location": "user/changelog/#miscellaneous_5", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Update codeowners - #281

    • Reactivate Windows CI - #255

    • Downgrade Poetry version on the Windows CI pipeline - #286

    • Set ANSI theme for output of kpops generate - #289

    "}, {"location": "user/changelog/#130-release-date-2023-07-07", "title": "1.3.0 - Release Date: [2023-07-07]", "text": ""}, {"location": "user/changelog/#refactor_8", "title": "\ud83c\udfed Refactor", "text": "
    • Plural broker field in pipeline config - #278
    "}, {"location": "user/changelog/#documentation_8", "title": "\ud83d\udcdd Documentation", "text": "
    • Update KPOps runner readme for dev versions - #279
    "}, {"location": "user/changelog/#breaking-changes_1", "title": "\ud83c\udfd7\ufe0f Breaking changes", "text": "
    • Plural broker field in pipeline config - #278
    "}, {"location": "user/changelog/#miscellaneous_6", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Add breaking changes section to change log config - #280
    "}, {"location": "user/changelog/#124-release-date-2023-06-27", "title": "1.2.4 - Release Date: [2023-06-27]", "text": ""}, {"location": "user/changelog/#miscellaneous_7", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Update changelog action to contain miscellaneous PRs - #269
    "}, {"location": "user/changelog/#123-release-date-2023-06-22", "title": "1.2.3 - Release Date: [2023-06-22]", "text": ""}, {"location": "user/changelog/#fixes_10", "title": "\ud83d\udc1b Fixes", "text": "
    • Refactor custom component validation & hide field from kpops output - #265
    "}, {"location": "user/changelog/#refactor_9", "title": "\ud83c\udfed Refactor", "text": "
    • Refactor custom component validation & hide field from kpops output - #265
    "}, {"location": "user/changelog/#miscellaneous_8", "title": "\ud83c\udf00 Miscellaneous", "text": ""}, {"location": "user/changelog/#122-release-date-2023-06-21", "title": "1.2.2 - Release Date: [2023-06-21]", "text": ""}, {"location": "user/changelog/#miscellaneous_9", "title": "\ud83c\udf00 Miscellaneous", "text": "
    • Create workflow to lint CI - #260

    • Fix update docs when releasing - #261

    • Rename change log message for uncategorized issues - #262

    "}, {"location": "user/changelog/#121-release-date-2023-06-21", "title": "1.2.1 - Release Date: [2023-06-21]", "text": "Uncategorized
    • Fix update docs in release workflow - #258
    "}, {"location": "user/changelog/#120-release-date-2023-06-21", "title": "1.2.0 - Release Date: [2023-06-21]", "text": ""}, {"location": "user/changelog/#features_3", "title": "\ud83d\ude80 Features", "text": "
    • Add helm repo update <repo-name> for Helm >3.7 - #239
    "}, {"location": "user/changelog/#fixes_11", "title": "\ud83d\udc1b Fixes", "text": "
    • add --namespace option to Helm template command - #237

    • Add missing type annotation for Pydantic attributes - #238

    • Fix helm version check - #242

    • Fix Helm Version Check - #244

    • Fix import from external module - #256

    "}, {"location": "user/changelog/#refactor_10", "title": "\ud83c\udfed Refactor", "text": "
    • Remove enable option from helm diff - #235

    • Refactor variable substitution - #198

    Uncategorized
    • Add background to docs home page - #236

    • Update Poetry version in CI - #247

    • Add pip cache in KPOps runner action - #249

    • Check types using Pyright - #251

    • Remove MyPy - #252

    • Disable broken Windows CI temporarily - #253

    • Update release and publish workflows - #254

    • Fix release & publish workflows - #257

    "}, {"location": "user/what-is-kpops/", "title": "What is KPOps?", "text": "

    With a couple of easy commands in the shell and a pipeline.yaml of under 30 lines, KPOps can not only deploy a Kafka pipeline1 to a Kubernetes cluster, but also reset, clean or destroy it!

    "}, {"location": "user/what-is-kpops/#key-features", "title": "Key features", "text": "
    • Deploy Kafka apps to Kubernetes: KPOps allows to deploy consecutive Kafka Streams applications and producers using an easy-to-read and -write pipeline definition.
    • Manage Kafka Connectors: KPOps connects with your Kafka Connect cluster and deploys, validates, and deletes your connectors.
    • Configure multiple pipelines and steps: KPOps has various abstractions that simplify configuring multiple pipelines and steps within pipelines by sharing common configuration between different components, such as producers or streaming applications.
    • Handle your topics and schemas: KPOps not only creates and deletes your topics but also registers and deletes your schemas.
    • Clean termination of Kafka components: KPOps removes your pipeline components (i.e., Kafka Streams applications) from the Kubernetes cluster and cleans up the component-related states (i.e., removing/resetting offset of Kafka consumer groups).
    • Preview your pipeline changes: With the KPOps dry-run, you can ensure your pipeline definition is set up correctly. This helps to minimize downtime and prevent potential errors or issues that could impact your production environment.
    "}, {"location": "user/what-is-kpops/#example", "title": "Example", "text": "An overview of Word-count pipeline shown in Streams Explorer Word-count pipeline.yaml
    - type: producer-app\n  name: data-producer\n  app:\n    image: bakdata/kpops-demo-sentence-producer\n    imageTag: \"1.0.0\"\n\n- type: streams-app\n  name: word-counter\n  to:\n    topics:\n      ${output_topic_name}:\n        type: output\n        configs:\n          cleanup.policy: compact\n  app:\n    replicaCount: 1\n    image: bakdata/kpops-demo-word-count-app\n    imageTag: \"1.0.0\"\n\n- type: kafka-sink-connector\n  name: redis-sink-connector\n  app:\n    connector.class: com.github.jcustenborder.kafka.connect.redis.RedisSinkConnector\n    redis.hosts: redis-headless:6379\n    redis.database: 0\n    tasks.max: 1\n    key.converter: org.apache.kafka.connect.storage.StringConverter\n    value.converter: org.apache.kafka.connect.storage.StringConverter\n
    1. A Kafka pipeline can consist of consecutive streaming applications, producers, and connectors.\u00a0\u21a9

    "}, {"location": "user/core-concepts/config/", "title": "Configuration", "text": "

    KPOps reads its global configuration that is unrelated to a pipeline's components from config.yaml.

    Consider enabling KPOps' editor integration feature to enjoy the benefits of autocompletion and validation when configuring your pipeline.

    To learn about any of the available settings, take a look at the example below.

    config.yaml
    # CONFIGURATION\n#\n# The path to the folder containing the defaults.yaml file and the environment\n# defaults files.\ndefaults_path: .\n# The environment you want to generate and deploy the pipeline to. Suffix your\n# environment files with this value (e.g. defaults_development.yaml and\n# pipeline_development.yaml for environment=development).\n# REQUIRED\nenvironment: development\n# The Kafka brokers address.\n# REQUIRED\nbrokers: \"http://broker1:9092,http://broker2:9092\"\n# The name of the defaults file and the prefix of the defaults environment file.\ndefaults_filename_prefix: defaults\n# Configures topic names.\ntopic_name_config: \n  # Configures the value for the variable ${output_topic_name}\n  default_output_topic_name: ${pipeline.name}-${component_name}\n  # Configures the value for the variable ${error_topic_name}\n  default_error_topic_name: ${pipeline.name}-${component_name}-error\n# Address of the Schema Registry\nschema_registry_url: \"http://localhost:8081\"\n# Address of the Kafka REST Proxy.\nkafka_rest_host: \"http://localhost:8082\"\n# Address of Kafka Connect.\nkafka_connect_host: \"http://localhost:8083\"\n# The timeout in seconds that specifies when actions like deletion or deploy\n# timeout.\ntimeout: 300\n# Flag for `helm upgrade --install`.\n# Create the release namespace if not present.\ncreate_namespace: false\n# Global flags for Helm.\nhelm_config:\n  # Set the name of the kubeconfig context. (--kube-context)\n  context: name\n  # Run Helm in Debug mode.\n  debug: false\n# Configure Helm Diff.\nhelm_diff_config: \n  # Set of keys that should not be checked.\n  ignore: \n    - name\n    - imageTag\n# Whether to retain clean up jobs in the cluster or uninstall the, after\n# completion.\nretain_clean_jobs: false\n

    Environment-specific pipeline definitions

    Similarly to defaults, it is possible to have an unlimited amount of additional environment-specific pipeline definitions. The naming convention is the same: add a suffix of the form _{environment} to the filename.

    "}, {"location": "user/core-concepts/defaults/", "title": "Defaults", "text": "

    KPOps has a very efficient way of dealing with repeating settings which manifests as defaults.yaml. This file provides the user with the power to set defaults for any and all components, thus omitting the need to repeat the same settings in pipeline.yaml.

    See real-world examples for defaults.

    "}, {"location": "user/core-concepts/defaults/#features", "title": "Features", "text": ""}, {"location": "user/core-concepts/defaults/#inheritance", "title": "Inheritance", "text": "

    An important mechanic of KPOps is that defaults set for a component apply to all components that inherit from it.

    It is possible, although not recommended, to add settings that are specific to a component's subclass. An example would be configuring offset_topic under kafka-connector instead of kafka-source-connector.

    "}, {"location": "user/core-concepts/defaults/#configuration", "title": "Configuration", "text": "

    It is possible to set specific defaults for each environment by adding files called defaults_{environment}.yaml to the defaults folder at defaults_path. The defaults are loaded based on the currently set environment.

    It is important to note that defaults_{environment}.yaml overrides only the settings that are explicitly set to be different from the ones in the base defaults file.

    Tip

    defaults is the default value of defaults_filename_prefix. Together with defaults_path and environment it can be changed in config.yaml

    "}, {"location": "user/core-concepts/defaults/#components", "title": "Components", "text": "

    The defaults codeblocks in this section contain the full set of settings that are specific to the component. If a setting already exists in a parent config, it will not be included in the child's.

    "}, {"location": "user/core-concepts/defaults/#kubernetesapp", "title": "KubernetesApp", "text": "defaults.yaml
    # Base Kubernetes App\n#\n# Parent of: HelmApp\n# Child of: PipelineComponent\nkubernetes-app:\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example.\n  app: # required\n    image: exampleImage # Example\n    debug: false # Example\n    commandLine: {} # Example\n
    "}, {"location": "user/core-concepts/defaults/#kafkaapp", "title": "KafkaApp", "text": "defaults.yaml
    # Base component for Kafka-based components.\n#\n# Parent of: ProducerApp, StreamsApp\n# Child of: KubernetesApp\nkafka-app:\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  # `app` can contain application-specific settings, hence  the user is free to\n  # add the key-value pairs they need.\n  app: # required\n    streams: # required\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n    nameOverride: override-with-this-name # kafka-app-specific\n    imageTag: \"1.0.0\" # Example values that are shared between streams-app and producer-app\n
    "}, {"location": "user/core-concepts/defaults/#streamsapp", "title": "StreamsApp", "text": "defaults.yaml
    # StreamsApp component that configures a streams bootstrap app.\n#\n# Child of: KafkaApp\n# More documentation on StreamsApp: https://github.com/bakdata/streams-bootstrap\nstreams-app:\n  # No arbitrary keys are allowed under `app`here\n  # Allowed configs:\n  # https://github.com/bakdata/streams-bootstrap/tree/master/charts/streams-app\n  app: # required\n    # Streams Bootstrap streams section\n    streams: # required, streams-app-specific\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n      inputTopics:\n        - topic1\n        - topic2\n      outputTopic: output-topic\n      inputPattern: input-pattern\n      extraInputTopics:\n        input_role1:\n          - input_topic1\n          - input_topic2\n        input_role2:\n          - input_topic3\n          - input_topic4\n      extraInputPatterns:\n        pattern_role1: input_pattern1\n      extraOutputTopics:\n        output_role1: output_topic1\n        output_role2: output_topic2\n      errorTopic: error-topic\n      config:\n        my.streams.config: my.value\n    nameOverride: override-with-this-name # streams-app-specific\n    autoscaling: # streams-app-specific\n      consumerGroup: consumer-group # required\n      lagThreshold: 0 # Average target value to trigger scaling actions.\n      enabled: false # Whether to enable auto-scaling using KEDA.\n      # This is the interval to check each trigger on.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#pollinginterval\n      pollingInterval: 30\n      # The period to wait after the last trigger reported active before scaling\n      #  the resource back to 0. https://keda.sh/docs/2.9/concepts/scaling-deployments/#cooldownperiod\n      cooldownPeriod: 300\n      # The offset reset policy for the consumer if the the consumer group is\n      # not yet subscribed to a partition.\n      offsetResetPolicy: earliest\n      # This setting is passed to the HPA definition that KEDA will create for a\n      # given resource and holds the maximum number of replicas of the target resouce.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#maxreplicacount\n      maxReplicas: 1\n      # Minimum number of replicas KEDA will scale the resource down to.\n      # https://keda.sh/docs/2.7/concepts/scaling-deployments/#minreplicacount\n      minReplicas: 0\n      # If this property is set, KEDA will scale the resource down to this\n      # number of replicas.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#idlereplicacount\n      idleReplicas: 0\n      topics: # List of auto-generated Kafka Streams topics used by the streams app.\n        - topic1\n        - topic2\n
    "}, {"location": "user/core-concepts/defaults/#producerapp", "title": "ProducerApp", "text": "defaults.yaml
    \n
    "}, {"location": "user/core-concepts/defaults/#kafkaconnector", "title": "KafkaConnector", "text": "defaults.yaml
    # Kafka connector\n#\n# Parent of: KafkaSinkConnector, KafkaSourceConnector\n# Child of: PipelineComponent\nkafka-connector:\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example. Extensive documentation on\n  # connectors: https://kafka.apache.org/documentation/#connectconfigs\n  app: # required\n    tasks.max: 1\n  # Helm repository configuration for resetter\n  repo_config:\n    repository_name: my-repo # required\n    url: https://bakdata.github.io/kafka-connect-resetter/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.6\" # Helm chart version\n  # Overriding Kafka Connect Resetter Helm values. E.g. to override the\n  # Image Tag etc.\n  resetter_values:\n    imageTag: \"1.2.3\"\n
    "}, {"location": "user/core-concepts/defaults/#kafkasourceconnector", "title": "KafkaSourceConnector", "text": "defaults.yaml
    # Kafka source connector\n#\n# Child of: KafkaConnector\nkafka-source-connector:\n  # The source connector has no `from` section\n  # from:\n  # offset.storage.topic\n  # https://kafka.apache.org/documentation/#connect_running\n  offset_topic: offset_topic\n
    "}, {"location": "user/core-concepts/defaults/#kafkasinkconnector", "title": "KafkaSinkConnector", "text": "defaults.yaml
    # Kafka sink connector\n#\n# Child of: KafkaConnector\nkafka-sink-connector:\n  # No settings differ from `kafka-connector`\n
    "}, {"location": "user/core-concepts/components/helm-app/", "title": "HelmApp", "text": ""}, {"location": "user/core-concepts/components/helm-app/#usage", "title": "Usage", "text": "

    Can be used to deploy any app in Kubernetes using Helm, for example, a REST service that serves Kafka data.

    "}, {"location": "user/core-concepts/components/helm-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Kubernetes app managed through Helm with an associated Helm chart\n- type: helm-app\n  name: helm-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example.\n  app: # required\n    image: exampleImage # Example\n    debug: false # Example\n    commandLine: {} # Example\n  # Helm repository configuration (optional)\n  # If not set the helm repo add will not be called. Useful when using local Helm charts\n  repo_config:\n    repository_name: bakdata-streams-bootstrap # required\n    url: https://bakdata.github.io/streams-bootstrap/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.0\" # Helm chart version\n
    "}, {"location": "user/core-concepts/components/helm-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/helm-app/#deploy", "title": "deploy", "text": "

    Deploy using Helm.

    "}, {"location": "user/core-concepts/components/helm-app/#destroy", "title": "destroy", "text": "

    Uninstall Helm release.

    "}, {"location": "user/core-concepts/components/helm-app/#reset", "title": "reset", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/helm-app/#clean", "title": "clean", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kafka-app/", "title": "KafkaApp", "text": "

    Subclass of HelmApp.

    "}, {"location": "user/core-concepts/components/kafka-app/#usage", "title": "Usage", "text": "
    • Defines a streams-bootstrap component
    • Should not be used in pipeline.yaml as the component can be defined as either a StreamsApp or a ProducerApp
    • Often used in defaults.yaml
    "}, {"location": "user/core-concepts/components/kafka-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Base component for Kafka-based components.\n# Producer or streaming apps should inherit from this class.\n- type: kafka-app # required\n  name: kafka-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  # `app` can contain application-specific settings, hence  the user is free to\n  # add the key-value pairs they need.\n  app: # required\n    streams: # required\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n    nameOverride: override-with-this-name # kafka-app-specific\n    imageTag: \"1.0.0\" # Example values that are shared between streams-app and producer-app\n
    "}, {"location": "user/core-concepts/components/kafka-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/kafka-app/#deploy", "title": "deploy", "text": "

    In addition to HelmApp's deploy:

    • Create topics if provided (optional)
    • Submit Avro schemas to the registry if provided (optional)
    "}, {"location": "user/core-concepts/components/kafka-app/#destroy", "title": "destroy", "text": "

    Uninstall Helm release.

    "}, {"location": "user/core-concepts/components/kafka-app/#reset", "title": "reset", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kafka-app/#clean", "title": "clean", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kafka-connector/", "title": "KafkaConnector", "text": "

    KafkaConnector is a component that deploys Kafka Connectors. Since a connector cannot be different from sink or source it is not recommended to use KafkaConnector for deployment in pipeline.yaml. Instead, KafkaConnector should be used in defaults.yaml to set defaults for all connectors in the pipeline as they can share some common settings.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/", "title": "KafkaSinkConnector", "text": "

    Subclass of KafkaConnector.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#usage", "title": "Usage", "text": "

    Lets other systems pull data from Apache Kafka.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Kafka sink connector\n- type: kafka-sink-connector\n  name: kafka-sink-connector # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example. Extensive documentation on\n  # connectors: https://kafka.apache.org/documentation/#connectconfigs\n  app: # required\n    tasks.max: 1\n  # Helm repository configuration for resetter\n  repo_config:\n    repository_name: my-repo # required\n    url: https://bakdata.github.io/kafka-connect-resetter/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.6\" # Helm chart version\n  # Overriding Kafka Connect Resetter Helm values. E.g. to override the\n  # Image Tag etc.\n  resetter_values:\n    imageTag: \"1.2.3\"\n
    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/kafka-sink-connector/#deploy", "title": "deploy", "text": "
    • Add the sink connector to the Kafka Connect cluster
    • Create the output topics if provided (optional)
    • Register schemas in the Schema Registry if provided (optional)
    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#destroy", "title": "destroy", "text": "

    The associated sink connector is removed from the Kafka Connect cluster.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#reset", "title": "reset", "text": "

    Reset the consumer group offsets using bakdata's sink resetter.

    "}, {"location": "user/core-concepts/components/kafka-sink-connector/#clean", "title": "clean", "text": "
    • Delete associated consumer group
    • Delete configured error topics
    "}, {"location": "user/core-concepts/components/kafka-source-connector/", "title": "KafkaSourceConnector", "text": "

    Subclass of KafkaConnector.

    "}, {"location": "user/core-concepts/components/kafka-source-connector/#usage", "title": "Usage", "text": "

    Manages source connectors in your Kafka Connect cluster.

    "}, {"location": "user/core-concepts/components/kafka-source-connector/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Kafka source connector\n- type: kafka-source-connector # required\n  name: kafka-source-connector # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  # The source connector has no `from` section\n  # from:\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example. Extensive documentation on\n  # connectors: https://kafka.apache.org/documentation/#connectconfigs\n  app: # required\n    tasks.max: 1\n  # Helm repository configuration for resetter\n  repo_config:\n    repository_name: my-repo # required\n    url: https://bakdata.github.io/kafka-connect-resetter/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.6\" # Helm chart version\n  # Overriding Kafka Connect Resetter Helm values. E.g. to override the\n  # Image Tag etc.\n  resetter_values:\n    imageTag: \"1.2.3\"\n  # offset.storage.topic\n  # https://kafka.apache.org/documentation/#connect_running\n  offset_topic: offset_topic\n
    "}, {"location": "user/core-concepts/components/kafka-source-connector/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/kafka-source-connector/#deploy", "title": "deploy", "text": "
    • Add the source connector to the Kafka Connect cluster
    • Create the output topics if provided (optional)
    • Register schemas in the Schema registry if provided (optional)
    "}, {"location": "user/core-concepts/components/kafka-source-connector/#destroy", "title": "destroy", "text": "

    Remove the source connector from the Kafka Connect cluster.

    "}, {"location": "user/core-concepts/components/kafka-source-connector/#reset", "title": "reset", "text": "

    Delete state associated with the connector using bakdata's sink resetter.

    "}, {"location": "user/core-concepts/components/kafka-source-connector/#clean", "title": "clean", "text": "
    • Delete all associated output topics
    • Delete all associated schemas in the Schema Registry
    • Delete state associated with the connector
    "}, {"location": "user/core-concepts/components/kubernetes-app/", "title": "KubernetesApp", "text": ""}, {"location": "user/core-concepts/components/kubernetes-app/#usage", "title": "Usage", "text": "

    Can be used to create components for any Kubernetes app.

    "}, {"location": "user/core-concepts/components/kubernetes-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Base Kubernetes App\n- type: kubernetes-app\n  name: kubernetes-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # `app` contains application-specific settings, hence it does not have a rigid\n  # structure. The fields below are just an example.\n  app: # required\n    image: exampleImage # Example\n    debug: false # Example\n    commandLine: {} # Example\n
    "}, {"location": "user/core-concepts/components/kubernetes-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/kubernetes-app/#deploy", "title": "deploy", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kubernetes-app/#destroy", "title": "destroy", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kubernetes-app/#reset", "title": "reset", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/kubernetes-app/#clean", "title": "clean", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/overview/", "title": "Overview", "text": "

    This section explains the different components of KPOps, their usage and configuration in the pipeline definition pipeline.yaml.

    flowchart BT\n    KubernetesApp --> PipelineComponent\n    KafkaApp --> PipelineComponent\n    HelmApp --> KubernetesApp\n    StreamsBootstrap --> HelmApp\n    StreamsApp --> KafkaApp\n    StreamsApp --> StreamsBootstrap\n    ProducerApp --> KafkaApp\n    ProducerApp --> StreamsBootstrap\n    KafkaConnector --> PipelineComponent\n    KafkaSourceConnector --> KafkaConnector\n    KafkaSinkConnector --> KafkaConnector\n\n    click KubernetesApp \"/kpops/user/core-concepts/components/kubernetes-app\"\n    click HelmApp \"/kpops/user/core-concepts/components/helm-app\"\n    click KafkaApp \"/kpops/user/core-concepts/components/kafka-app\"\n    click StreamsBootstrap \"/kpops/user/core-concepts/components/streams-bootstrap\"\n    click StreamsApp \"/kpops/user/core-concepts/components/streams-app\"\n    click ProducerApp \"/kpops/user/core-concepts/components/producer-app\"\n    click KafkaConnector \"/kpops/user/core-concepts/components/kafka-connector\"\n    click KafkaSourceConnector \"/kpops/user/core-concepts/components/kafka-source-connector\"\n    click KafkaSinkConnector \"/kpops/user/core-concepts/components/kafka-sink-connector\"

    KPOps component hierarchy

    "}, {"location": "user/core-concepts/components/producer-app/", "title": "ProducerApp", "text": "

    Subclass of KafkaApp and StreamsBootstrap.

    "}, {"location": "user/core-concepts/components/producer-app/#usage", "title": "Usage", "text": "

    Configures a streams-bootstrap Kafka producer app

    "}, {"location": "user/core-concepts/components/producer-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # Holds configuration to use as values for the streams bootstrap producer-app Helm\n# chart.\n# More documentation on ProducerApp:\n# https://github.com/bakdata/streams-bootstrap\n- type: producer-app\n  name: producer-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  # from: # While the producer-app does inherit from kafka-app, it does not need a\n  # `from` section, hence it does not support it.\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # Allowed configs:\n  # https://github.com/bakdata/streams-bootstrap/tree/master/charts/producer-app\n  app: # required\n    streams: # required, producer-app-specific\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n      outputTopic: output_topic\n      extraOutputTopics:\n        output_role1: output_topic1\n        output_role2: output_topic2\n    nameOverride: override-with-this-name # kafka-app-specific\n  # Helm repository configuration (optional)\n  # If not set the helm repo add will not be called. Useful when using local Helm charts\n  repo_config:\n    repository_name: bakdata-streams-bootstrap # required\n    url: https://bakdata.github.io/streams-bootstrap/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"2.12.0\" # Helm chart version\n
    "}, {"location": "user/core-concepts/components/producer-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/producer-app/#deploy", "title": "deploy", "text": "

    In addition to KubernetesApp's deploy:

    • Create topics if provided (optional)
    • Submit Avro schemas to the registry if provided (optional)
    "}, {"location": "user/core-concepts/components/producer-app/#destroy", "title": "destroy", "text": "

    Uninstall Helm release.

    "}, {"location": "user/core-concepts/components/producer-app/#reset", "title": "reset", "text": "

    Do nothing, producers are stateless.

    "}, {"location": "user/core-concepts/components/producer-app/#clean", "title": "clean", "text": "
    • Delete the output topics of the Kafka producer
    • Delete all associated schemas in the Schema Registry
    "}, {"location": "user/core-concepts/components/streams-app/", "title": "StreamsApp", "text": "

    Subclass of KafkaApp and StreamsBootstrap.

    "}, {"location": "user/core-concepts/components/streams-app/#usage", "title": "Usage", "text": "

    Configures a streams-bootstrap Kafka Streams app

    "}, {"location": "user/core-concepts/components/streams-app/#configuration", "title": "Configuration", "text": "pipeline.yaml
    # StreamsApp component that configures a streams bootstrap app.\n# More documentation on StreamsApp: https://github.com/bakdata/streams-bootstrap\n- type: streams-app # required\n  name: streams-app # required\n  # Pipeline prefix that will prefix every component name. If you wish to not\n  # have any prefix you can specify an empty string.\n  prefix: ${pipeline.name}-\n  from: # Must not be null\n    topics: # read from topic\n      ${pipeline.name}-input-topic:\n        type: input # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra\n      ${pipeline.name}-input-pattern-topic:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      ${pipeline.name}-extra-pattern-topic:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n    components: # read from specific component\n      account-producer:\n        type: output # Implied when role is NOT specified\n      other-producer:\n        role: some-role # Implies `type` to be extra\n      component-as-input-pattern:\n        type: pattern # Implied to be an input pattern if `role` is undefined\n      component-as-extra-pattern:\n        type: pattern # Implied to be an extra pattern if `role` is defined\n        role: some-role\n  # Topic(s) into which the component will write output\n  to:\n    topics:\n      ${pipeline.name}-output-topic:\n        type: output # Implied when role is NOT specified\n      ${pipeline.name}-extra-topic:\n        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined\n      ${pipeline.name}-error-topic:\n        type: error\n        # Currently KPOps supports Avro and JSON schemas.\n        key_schema: key-schema # must implement SchemaProvider to use\n        value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs: # https://kafka.apache.org/documentation/#topicconfigs\n          cleanup.policy: compact\n    models: # SchemaProvider is initiated with the values given here\n      model: model\n  namespace: namespace # required\n  # No arbitrary keys are allowed under `app`here\n  # Allowed configs:\n  # https://github.com/bakdata/streams-bootstrap/tree/master/charts/streams-app\n  app: # required\n    # Streams Bootstrap streams section\n    streams: # required, streams-app-specific\n      brokers: ${config.kafka_brokers} # required\n      schemaRegistryUrl: ${config.schema_registry.url}\n      inputTopics:\n        - topic1\n        - topic2\n      outputTopic: output-topic\n      inputPattern: input-pattern\n      extraInputTopics:\n        input_role1:\n          - input_topic1\n          - input_topic2\n        input_role2:\n          - input_topic3\n          - input_topic4\n      extraInputPatterns:\n        pattern_role1: input_pattern1\n      extraOutputTopics:\n        output_role1: output_topic1\n        output_role2: output_topic2\n      errorTopic: error-topic\n      config:\n        my.streams.config: my.value\n    nameOverride: override-with-this-name # streams-app-specific\n    autoscaling: # streams-app-specific\n      consumerGroup: consumer-group # required\n      lagThreshold: 0 # Average target value to trigger scaling actions.\n      enabled: false # Whether to enable auto-scaling using KEDA.\n      # This is the interval to check each trigger on.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#pollinginterval\n      pollingInterval: 30\n      # The period to wait after the last trigger reported active before scaling\n      #  the resource back to 0. https://keda.sh/docs/2.9/concepts/scaling-deployments/#cooldownperiod\n      cooldownPeriod: 300\n      # The offset reset policy for the consumer if the the consumer group is\n      # not yet subscribed to a partition.\n      offsetResetPolicy: earliest\n      # This setting is passed to the HPA definition that KEDA will create for a\n      # given resource and holds the maximum number of replicas of the target resouce.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#maxreplicacount\n      maxReplicas: 1\n      # Minimum number of replicas KEDA will scale the resource down to.\n      # https://keda.sh/docs/2.7/concepts/scaling-deployments/#minreplicacount\n      minReplicas: 0\n      # If this property is set, KEDA will scale the resource down to this\n      # number of replicas.\n      # https://keda.sh/docs/2.9/concepts/scaling-deployments/#idlereplicacount\n      idleReplicas: 0\n      topics: # List of auto-generated Kafka Streams topics used by the streams app.\n        - topic1\n        - topic2\n  # Helm repository configuration (optional)\n  # If not set the helm repo add will not be called. Useful when using local Helm charts\n  repo_config:\n    repository_name: bakdata-streams-bootstrap # required\n    url: https://bakdata.github.io/streams-bootstrap/ # required\n    repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"2.12.0\" # Helm chart version\n
    "}, {"location": "user/core-concepts/components/streams-app/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/streams-app/#deploy", "title": "deploy", "text": "

    In addition to KubernetesApp's deploy:

    • Create topics if provided (optional)
    • Submit Avro schemas to the registry if provided (optional)
    "}, {"location": "user/core-concepts/components/streams-app/#destroy", "title": "destroy", "text": "

    Uninstall Helm release.

    "}, {"location": "user/core-concepts/components/streams-app/#reset", "title": "reset", "text": "
    • Delete the consumer group offsets
    • Delete Kafka Streams state
    "}, {"location": "user/core-concepts/components/streams-app/#clean", "title": "clean", "text": "

    Similar to reset with to additional steps:

    • Delete the app's output topics
    • Delete all associated schemas in the Schema Registry
    "}, {"location": "user/core-concepts/components/streams-bootstrap/", "title": "StreamsApp", "text": "

    Subclass of HelmApp.

    "}, {"location": "user/core-concepts/components/streams-bootstrap/#usage", "title": "Usage", "text": "

    Configures a Helm app with streams-bootstrap Helm charts.

    "}, {"location": "user/core-concepts/components/streams-bootstrap/#operations", "title": "Operations", "text": ""}, {"location": "user/core-concepts/components/streams-bootstrap/#deploy", "title": "deploy", "text": "

    Deploy using Helm.

    "}, {"location": "user/core-concepts/components/streams-bootstrap/#destroy", "title": "destroy", "text": "

    Uninstall Helm release.

    "}, {"location": "user/core-concepts/components/streams-bootstrap/#reset", "title": "reset", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/components/streams-bootstrap/#clean", "title": "clean", "text": "

    Do nothing.

    "}, {"location": "user/core-concepts/variables/environment_variables/", "title": "Environment variables", "text": "

    Environment variables can be set by using the export command in Linux or the set command in Windows.

    dotenv files

    KPOps currently supports .env files only for variables related to the config. Full support for .env files is on the roadmap. One of the possible ways to use one and export the contents manually is with the following command: export $(xargs < .env). This would work in bash suppose there are no spaces inside the values.

    "}, {"location": "user/core-concepts/variables/environment_variables/#config", "title": "Config", "text": "

    These variables are a lower priority alternative to the settings in config.yaml. Variables marked as required can instead be set in the global config.

    Name Default Value Required Description Setting name KPOPS_DEFAULTS_PATH . False The path to the folder containing the defaults.yaml file and the environment defaults files. Paths can either be absolute or relative to config.yaml defaults_path KPOPS_COMPONENTS_MODULE False Custom Python module defining project-specific KPOps components components_module KPOPS_PIPELINE_BASE_DIR . False Base directory to the pipelines (default is current working directory) pipeline_base_dir KPOPS_KAFKA_BROKERS True The comma separated Kafka brokers address. kafka_brokers KPOPS_DEFAULTS_FILENAME_PREFIX defaults False The name of the defaults file and the prefix of the defaults environment file. defaults_filename_prefix KPOPS_TOPIC_NAME_CONFIG__DEFAULT_OUTPUT_TOPIC_NAME ${pipeline.name}-${component.name} False Configures the value for the variable ${output_topic_name} topic_name_config.default_output_topic_name KPOPS_TOPIC_NAME_CONFIG__DEFAULT_ERROR_TOPIC_NAME ${pipeline.name}-${component.name}-error False Configures the value for the variable ${error_topic_name} topic_name_config.default_error_topic_name KPOPS_SCHEMA_REGISTRY__ENABLED False False Whether the Schema Registry handler should be initialized. schema_registry.enabled KPOPS_SCHEMA_REGISTRY__URL http://localhost:8081/ False Address of the Schema Registry. schema_registry.url KPOPS_KAFKA_REST__URL http://localhost:8082/ False Address of the Kafka REST Proxy. kafka_rest.url KPOPS_KAFKA_CONNECT__URL http://localhost:8083/ False Address of Kafka Connect. kafka_connect.url KPOPS_TIMEOUT 300 False The timeout in seconds that specifies when actions like deletion or deploy timeout. timeout KPOPS_CREATE_NAMESPACE False False Flag for helm upgrade --install. Create the release namespace if not present. create_namespace KPOPS_HELM_CONFIG__CONTEXT False Name of kubeconfig context (--kube-context) helm_config.context KPOPS_HELM_CONFIG__DEBUG False False Run Helm in Debug mode helm_config.debug KPOPS_HELM_CONFIG__API_VERSION False Kubernetes API version used for Capabilities.APIVersions helm_config.api_version KPOPS_HELM_DIFF_CONFIG__IGNORE True Set of keys that should not be checked. helm_diff_config.ignore KPOPS_RETAIN_CLEAN_JOBS False False Whether to retain clean up jobs in the cluster or uninstall the, after completion. retain_clean_jobs config_env_vars.env Exhaustive list of all config-related environment variables
    # Global config environment variables\n#\n# The default setup is shown. These variables are a lower priority\n# alternative to the settings in `config.yaml`. Variables marked as\n# required can instead be set in the global config.\n#\n# defaults_path\n# The path to the folder containing the defaults.yaml file and the\n# environment defaults files. Paths can either be absolute or relative\n# to `config.yaml`\nKPOPS_DEFAULTS_PATH=.\n# components_module\n# Custom Python module defining project-specific KPOps components\nKPOPS_COMPONENTS_MODULE # No default value, not required\n# pipeline_base_dir\n# Base directory to the pipelines (default is current working\n# directory)\nKPOPS_PIPELINE_BASE_DIR=.\n# kafka_brokers\n# The comma separated Kafka brokers address.\nKPOPS_KAFKA_BROKERS # No default value, required\n# defaults_filename_prefix\n# The name of the defaults file and the prefix of the defaults\n# environment file.\nKPOPS_DEFAULTS_FILENAME_PREFIX=defaults\n# topic_name_config.default_output_topic_name\n# Configures the value for the variable ${output_topic_name}\nKPOPS_TOPIC_NAME_CONFIG__DEFAULT_OUTPUT_TOPIC_NAME=${pipeline.name}-${component.name}\n# topic_name_config.default_error_topic_name\n# Configures the value for the variable ${error_topic_name}\nKPOPS_TOPIC_NAME_CONFIG__DEFAULT_ERROR_TOPIC_NAME=${pipeline.name}-${component.name}-error\n# schema_registry.enabled\n# Whether the Schema Registry handler should be initialized.\nKPOPS_SCHEMA_REGISTRY__ENABLED=False\n# schema_registry.url\n# Address of the Schema Registry.\nKPOPS_SCHEMA_REGISTRY__URL=http://localhost:8081/\n# kafka_rest.url\n# Address of the Kafka REST Proxy.\nKPOPS_KAFKA_REST__URL=http://localhost:8082/\n# kafka_connect.url\n# Address of Kafka Connect.\nKPOPS_KAFKA_CONNECT__URL=http://localhost:8083/\n# timeout\n# The timeout in seconds that specifies when actions like deletion or\n# deploy timeout.\nKPOPS_TIMEOUT=300\n# create_namespace\n# Flag for `helm upgrade --install`. Create the release namespace if\n# not present.\nKPOPS_CREATE_NAMESPACE=False\n# helm_config.context\n# Name of kubeconfig context (`--kube-context`)\nKPOPS_HELM_CONFIG__CONTEXT # No default value, not required\n# helm_config.debug\n# Run Helm in Debug mode\nKPOPS_HELM_CONFIG__DEBUG=False\n# helm_config.api_version\n# Kubernetes API version used for Capabilities.APIVersions\nKPOPS_HELM_CONFIG__API_VERSION # No default value, not required\n# helm_diff_config.ignore\n# Set of keys that should not be checked.\nKPOPS_HELM_DIFF_CONFIG__IGNORE # No default value, required\n# retain_clean_jobs\n# Whether to retain clean up jobs in the cluster or uninstall the,\n# after completion.\nKPOPS_RETAIN_CLEAN_JOBS=False\n
    "}, {"location": "user/core-concepts/variables/environment_variables/#cli", "title": "CLI", "text": "

    These variables are a lower priority alternative to the commands' flags. If a variable is set, the corresponding flag does not have to be specified in commands. Variables marked as required can instead be set as flags.

    Name Default Value Required Description KPOPS_CONFIG_PATH . False Path to the dir containing config.yaml files KPOPS_DEFAULT_PATH False Path to defaults folder KPOPS_DOTENV_PATH False Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. KPOPS_ENVIRONMENT False The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). KPOPS_PIPELINE_PATH True Path to YAML with pipeline definition KPOPS_PIPELINE_STEPS False Comma separated list of steps to apply the command on cli_env_vars.env Exhaustive list of all cli-related environment variables
    # CLI Environment variables\n#\n# The default setup is shown. These variables are a lower priority\n# alternative to the commands' flags. If a variable is set, the\n# corresponding flag does not have to be specified in commands.\n# Variables marked as required can instead be set as flags.\n#\n# Path to the dir containing config.yaml files\nKPOPS_CONFIG_PATH=.\n# Path to defaults folder\nKPOPS_DEFAULT_PATH # No default value, not required\n# Path to dotenv file. Multiple files can be provided. The files will\n# be loaded in order, with each file overriding the previous one.\nKPOPS_DOTENV_PATH # No default value, not required\n# The environment you want to generate and deploy the pipeline to.\n# Suffix your environment files with this value (e.g.\n# defaults_development.yaml for environment=development).\nKPOPS_ENVIRONMENT # No default value, not required\n# Path to YAML with pipeline definition\nKPOPS_PIPELINE_PATH # No default value, required\n# Comma separated list of steps to apply the command on\nKPOPS_PIPELINE_STEPS # No default value, not required\n
    "}, {"location": "user/core-concepts/variables/substitution/", "title": "Substitution", "text": "

    KPOps supports the usage of placeholders and environment variables in pipeline definition and defaults.

    "}, {"location": "user/core-concepts/variables/substitution/#component-specific-variables", "title": "Component-specific variables", "text": "

    These variables can be used in a component's definition to refer to any of its attributes, including ones that the user has defined in the defaults.

    All of them are prefixed with component. and follow the following form: component.{attribute_name}. If the attribute itself contains attributes, they can be referred to like this: component.{attribute_name}.{subattribute_name}.

    Example
    - type: scheduled-producer\n  app:\n    labels:\n      app_type: \"${component.type}\"\n      app_name: \"${component.name}\"\n      app_schedule: \"${component.app.schedule}\"\n    commandLine:\n      FAKE_ARG: \"fake-arg-value\"\n    schedule: \"30 3/8 * * *\"\n- type: converter\n  app:\n    commandLine:\n      CONVERT_XML: true\n    resources:\n      limits:\n        memory: 2G\n      requests:\n        memory: 2G\n- type: filter\n  name: \"filter-app\"\n  app:\n    labels:\n      app_type: \"${component.type}\"\n      app_name: \"${component.name}\"\n      app_resources_requests_memory: \"${component.app.resources.requests.memory}\"\n      ${component.type}: \"${component.app.labels.app_name}-${component.app.labels.app_type}\"\n      test_placeholder_in_placeholder: \"${component.app.labels.${component.type}}\"\n    commandLine:\n      TYPE: \"nothing\"\n    resources:\n      requests:\n        memory: 3G\n    replicaCount: 4\n    autoscaling:\n      minReplicas: 4\n      maxReplicas: 4\n
    "}, {"location": "user/core-concepts/variables/substitution/#pipeline-config-specific-variables", "title": "Pipeline-config-specific variables", "text": "

    These variables include all fields in the config and refer to the pipeline configuration that is independent of the components.

    Info

    error_topic_name is an alias for topic_name_config.default_error_topic_name output_topic_name is an alias for topic_name_config.default_output_topic_name

    "}, {"location": "user/core-concepts/variables/substitution/#environment-variables", "title": "Environment variables", "text": "

    Environment variables such as $PATH can be used in the pipeline definition and defaults without any transformation following the form ${ENV_VAR_NAME}. This, of course, includes variables like the ones relevant to the KPOps cli that are exported by the user.

    See all KPOps environment variables

    "}, {"location": "user/core-concepts/variables/substitution/#pipeline-name-variables", "title": "Pipeline name variables", "text": "

    These are special variables that refer to the name and path of a pipeline.

    • ${pipeline.name}: Concatenated path of the parent directory where pipeline.yaml is defined in. For instance, ./data/pipelines/v1/pipeline.yaml, here the value for the variable would be data-pipelines-v1.

    • ${pipeline_name_<level>}: Similar to the previous variable, each <level> contains a part of the path to the pipeline.yaml file. Consider the previous example, ${pipeline_name_0} would be data, ${pipeline_name_1} would be pipelines, and ${pipeline_name_2} equals to v1.

    "}, {"location": "user/core-concepts/variables/substitution/#advanced-use-cases", "title": "Advanced use cases", "text": "
    1. Refer to default component field values: As long as a value is assigned to a component attribute, it is possible to refer to it with a placeholder. To see all component fields, take a look at the pipeline schema.
    2. Chaining variables: It is possible to chain any number of variables, see the example above.
    3. Cross-component substitution: YAML is quite an intricate language and with some of its magic one could write cross-component references.
    "}, {"location": "user/examples/atm-fraud-pipeline/", "title": "ATM fraud detection pipeline", "text": "

    ATM fraud is a demo pipeline for ATM fraud detection. The original by Confluent is written in KSQL and outlined in this blogpost. The one used in this example is re-built from scratch using bakdata's streams-bootstrap library.

    "}, {"location": "user/examples/atm-fraud-pipeline/#what-this-will-demonstrate", "title": "What this will demonstrate", "text": "
    • Deploying a PostgreSQL database using Helm
    • Deploying a pipeline using KPOps
    • Destroying a pipeline using KPOps
    "}, {"location": "user/examples/atm-fraud-pipeline/#prerequisites", "title": "Prerequisites", "text": "

    Completed all steps in the setup.

    "}, {"location": "user/examples/atm-fraud-pipeline/#setup-and-deployment", "title": "Setup and deployment", "text": ""}, {"location": "user/examples/atm-fraud-pipeline/#postgresql", "title": "PostgreSQL", "text": "

    Deploy PostgreSQL using the Bitnami Helm chart: Add the helm repository:

    helm repo add bitnami https://charts.bitnami.com/bitnami && \\\nhelm repo update\n

    Install the PostgreSQL with helm:

    helm upgrade --install -f ./postgresql.yaml \\\n--namespace kpops \\\npostgresql bitnami/postgresql\n
    PostgreSQL Example Helm chart values (postgresql.yaml)
    auth:\n  database: app_db  \n  enablePostgresUser: true\n  password: AppPassword\n  postgresPassword: StrongPassword\n  username: app1\nprimary:\n  persistence:\n    enabled: false\n    existingClaim: postgresql-data-claim\nvolumePermissions:\n  enabled: true\n
    "}, {"location": "user/examples/atm-fraud-pipeline/#atm-fraud-detection-example-pipeline-setup", "title": "ATM fraud detection example pipeline setup", "text": ""}, {"location": "user/examples/atm-fraud-pipeline/#port-forwarding", "title": "Port forwarding", "text": "

    Before we deploy the pipeline, we need to forward the ports of kafka-rest-proxy and kafka-connect. Run the following commands in two different terminals.

    kubectl port-forward --namespace kpops service/k8kafka-cp-rest 8082:8082\n
    kubectl port-forward --namespace kpops service/k8kafka-cp-kafka-connect 8083:8083\n
    "}, {"location": "user/examples/atm-fraud-pipeline/#deploying-the-atm-fraud-detection-pipeline", "title": "Deploying the ATM fraud detection pipeline", "text": "
    1. Export environment variables in your terminal:

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    2. Deploy the pipeline

      poetry run kpops deploy ./examples/bakdata/atm-fraud-detection/pipeline.yaml \\\n--pipeline-base-dir ./examples \\\n--config ./examples/bakdata/atm-fraud-detection/config.yaml \\\n--execute\n

    Note

    You can use the --dry-run flag instead of the --execute flag and check the logs if your pipeline will be deployed correctly.

    "}, {"location": "user/examples/atm-fraud-pipeline/#check-if-the-deployment-is-successful", "title": "Check if the deployment is successful", "text": "

    You can use the Streams Explorer to see the deployed pipeline. To do so, port-forward the service in a separate terminal session using the command below:

    kubectl port-forward -n kpops service/streams-explorer 8080:8080\n

    After that open http://localhost:8080 in your browser. You should be able to see pipeline shown in the image below:

    An overview of ATM fraud pipeline shown in Streams Explorer

    Attention

    Kafka Connect needs some time to set up the connector. Moreover, Streams Explorer needs a while to scrape the information from Kafka connect. Therefore, it might take a bit until you see the whole graph.

    "}, {"location": "user/examples/atm-fraud-pipeline/#teardown-resources", "title": "Teardown resources", "text": ""}, {"location": "user/examples/atm-fraud-pipeline/#postrgresql", "title": "PostrgreSQL", "text": "

    PostgreSQL can be uninstalled by running the following command:

    helm --namespace kpops uninstall postgresql\n
    "}, {"location": "user/examples/atm-fraud-pipeline/#atm-fraud-pipeline", "title": "ATM fraud pipeline", "text": "
    1. Export environment variables in your terminal.

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    2. Remove the pipeline

      poetry run kpops clean ./examples/bakdata/atm-fraud-detection/pipeline.yaml \\\n--pipeline-base-dir ./examples \\\n--config ./examples/bakdata/atm-fraud-detection/config.yaml \\\n--verbose \\\n--execute\n

    Note

    You can use the --dry-run flag instead of the --execute flag and check the logs if your pipeline will be destroyed correctly.

    Attention

    If you face any issues destroying this example see Teardown for manual deletion.

    "}, {"location": "user/examples/atm-fraud-pipeline/#common-errors", "title": "Common errors", "text": "
    • deploy fails:
    • Read the error message.
    • Try to correct the mistakes if there were any. Likely the configuration is not correct or the port-forwarding is not working as intended.
    • Run clean.
    • Run deploy --dry-run to avoid havig to clean again. If an error is dropped, start over from step 1.
    • If the dry-run is succesful, run deploy.
    • clean fails:
    • Read the error message.
    • Try to correct the indicated mistakes if there were any. Likely the configuration is not correct or the port-forwarding is not working as intended.
    • Run clean.
    • If clean fails, follow the steps in teardown.
    "}, {"location": "user/getting-started/quick-start/", "title": "Quick start", "text": ""}, {"location": "user/getting-started/quick-start/#word-count", "title": "Word-count", "text": "

    Word-count is a demo pipeline which consists of a producer producing words to Kafka, a Kafka streams app counting the number of times each word occurs and finally a Redis database into which the words are exported.

    "}, {"location": "user/getting-started/quick-start/#what-this-will-demonstrate", "title": "What this will demonstrate", "text": "
    • Deploying a Redis database using Helm
    • Deploying a pipeline using KPOps
    • Destroying a pipeline using KPOps
    "}, {"location": "user/getting-started/quick-start/#prerequisites", "title": "Prerequisites", "text": "

    Completed all steps in the setup.

    "}, {"location": "user/getting-started/quick-start/#setup-and-deployment", "title": "Setup and deployment", "text": ""}, {"location": "user/getting-started/quick-start/#redis", "title": "Redis", "text": "

    Deploy Redis using the Bitnami Helm chart: Add the Helm repository:

    helm repo add bitnami https://charts.bitnami.com/bitnami && \\\nhelm repo update\n

    Install Redis with Helm:

    helm upgrade --install -f ./values-redis.yaml \\\n--namespace kpops \\\nredis bitnami/redis\n
    Redis example Helm chart values (values-redis.yaml)
    architecture: standalone\nauth:\n  enabled: false\nmaster:\n  count: 1\n  configuration: \"databases 1\"\nimage:\n  tag: 7.0.8\n
    "}, {"location": "user/getting-started/quick-start/#word-count-example-pipeline-setup", "title": "Word-count example pipeline setup", "text": ""}, {"location": "user/getting-started/quick-start/#port-forwarding", "title": "Port forwarding", "text": "

    Before we deploy the pipeline, we need to forward the ports of kafka-rest-proxy and kafka-connect. Run the following commands in two different terminals.

    kubectl port-forward --namespace kpops service/k8kafka-cp-rest 8082:8082\n
    kubectl port-forward --namespace kpops service/k8kafka-cp-kafka-connect 8083:8083\n
    "}, {"location": "user/getting-started/quick-start/#deploying-the-word-count-pipeline", "title": "Deploying the Word-count pipeline", "text": "
    1. Copy the configuration from the kpops-examples repository into kpops>examples>bakdata>word-count like so:

      kpops\n\u251c\u2500\u2500 examples\n|   \u251c\u2500\u2500 bakdata\n|   |   \u251c\u2500\u2500 word-count\n|   |   |   \u251c\u2500\u2500 config.yaml\n|   |   |   \u251c\u2500\u2500 defaults\n|   |   |   \u2502\u00a0\u00a0 \u2514\u2500\u2500 defaults.yaml\n|   |   |   \u2514\u2500\u2500 pipeline.yaml\n|   |   |\n
    2. Export environment variables in your terminal:

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    3. Deploy the pipeline

      kpops deploy ./examples/bakdata/word-count/pipeline.yaml \\\n--pipeline-base-dir ./examples \\\n--config ./examples/bakdata/word-count/config.yaml \\\n--execute\n

    Note

    You can use the --dry-run flag instead of the --execute flag and check the logs if your pipeline will be deployed correctly.

    "}, {"location": "user/getting-started/quick-start/#check-if-the-deployment-is-successful", "title": "Check if the deployment is successful", "text": "

    You can use the Streams Explorer to inspect the deployed pipeline. To do so, port-forward the service in a separate terminal session using the command below:

    kubectl port-forward -n kpops service/streams-explorer 8080:8080\n

    After that open http://localhost:8080 in your browser.

    You should be able to see pipeline shown in the image below:

    An overview of Word-count pipeline shown in Streams Explorer

    Attention

    Kafka Connect needs some time to set up the connector. Moreover, Streams Explorer needs a while to scrape the information from Kafka Connect. Therefore, it might take a bit until you see the whole graph.

    "}, {"location": "user/getting-started/quick-start/#teardown-resources", "title": "Teardown resources", "text": ""}, {"location": "user/getting-started/quick-start/#redis_1", "title": "Redis", "text": "

    Redis can be uninstalled by running the following command:

    helm --namespace kpops uninstall redis\n
    "}, {"location": "user/getting-started/quick-start/#word-count-pipeline", "title": "Word-count pipeline", "text": "
    1. Export environment variables in your terminal.

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    2. Remove the pipeline

      kpops clean ./examples/bakdata/word-count/pipeline.yaml \\\n--pipeline-base-dir ./examples \\\n--config ./examples/bakdata/word-count/config.yaml \\\n--verbose \\\n--execute\n

    Note

    You can use the --dry-run flag instead of the --execute flag and check the logs if your pipeline will be destroyed correctly.

    Attention

    If you face any issues destroying this example see Teardown for manual deletion.

    "}, {"location": "user/getting-started/quick-start/#common-errors", "title": "Common errors", "text": "
    • deploy fails:
      1. Read the error message.
      2. Try to correct the mistakes if there were any. Likely the configuration is not correct or the port-forwarding is not working as intended.
      3. Run clean.
      4. Run deploy --dry-run to avoid having to clean again. If an error is dropped, start over from step 1.
      5. If the dry-run is successful, run deploy.
    • clean fails:
      1. Read the error message.
      2. Try to correct the indicated mistakes if there were any. Likely the configuration is not correct or the port-forwarding is not working as intended.
      3. Run clean.
      4. If clean fails, follow the steps in teardown.
    "}, {"location": "user/getting-started/setup/", "title": "Setup KPOps", "text": "

    In this part, you will set up KPOps. This includes:

    • optionally creating a local Kubernetes cluster
    • running Apache Kafka and Confluent's Schema Registry
    • installing KPOps
    "}, {"location": "user/getting-started/setup/#prerequisites", "title": "Prerequisites", "text": "
    • k3d (Version 5.4.6+) and Docker (Version >= v20.10.5) or an existing Kubernetes cluster (>= 1.21.0)
    • kubectl (Compatible with server version 1.21.0)
    • Helm (Version 3.8.0+)
    "}, {"location": "user/getting-started/setup/#setup-kubernetes-with-k3d", "title": "Setup Kubernetes with k3d", "text": "

    If you don't have access to an existing Kubernetes cluster, this section will guide you through creating a local cluster. We recommend the lightweight Kubernetes distribution k3s for this. k3d is a wrapper around k3s in Docker that lets you get started fast.

    1. You can install k3d with its installation script:

      wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/v5.4.6/install.sh | bash\n

      For other ways of installing k3d, you can have a look at their installation guide.

    2. The Kafka deployment needs a modified Docker image. In that case the image is built and pushed to a Docker registry that holds it. If you do not have access to an existing Docker registry, you can use k3d's Docker registry:

      k3d registry create kpops-registry.localhost --port 12345\n
    3. Now you can create a new cluster called kpops that uses the previously created Docker registry:

      k3d cluster create kpops --k3s-arg \"--no-deploy=traefik@server:*\" --registry-use k3d-kpops-registry.localhost:12345\n

    Note

    Creating a new k3d cluster automatically configures kubectl to connect to the local cluster by modifying your ~/.kube/config. In case you manually set the KUBECONFIG variable or don't want k3d to modify your config, k3d offers many other options.

    You can check the cluster status with kubectl get pods -n kube-system. If all returned elements have a STATUS of Running or Completed, then the cluster is up and running.

    "}, {"location": "user/getting-started/setup/#deploy-kafka", "title": "Deploy Kafka", "text": "

    Kafka is an open-source data streaming platform. More information about Kafka can be found in the documentation. To deploy Kafka, this guide uses Confluent's Helm chart.

    1. To allow connectivity to other systems Kafka Connect needs to be extended with drivers. You can install a JDBC driver for Kafka Connect by creating a new Docker image:

      1. Create a Dockerfile with the following content:

        FROM confluentinc/cp-kafka-connect:7.1.3\n\nRUN confluent-hub install --no-prompt confluentinc/kafka-connect-jdbc:10.6.0\n
      2. Build and push the modified image to your private Docker registry:

        docker build . --tag localhost:12345/kafka-connect-jdbc:7.1.3 && \\\ndocker push localhost:12345/kafka-connect-jdbc:7.1.3\n

      Detailed instructions on building, tagging and pushing a docker image can be found in Docker docs.

    2. Add Confluent's Helm chart repository and update the index:

      helm repo add confluentinc https://confluentinc.github.io/cp-helm-charts/ &&  \nhelm repo update\n
    3. Install Kafka, Zookeeper, Confluent's Schema Registry, Kafka Rest Proxy, and Kafka Connect. A single Helm chart installs all five components. Below you can find an example for the --values ./kafka.yaml file configuring the deployment accordingly. Deploy the services:

      helm upgrade \\\n    --install \\\n    --version 0.6.1 \\\n    --values ./kafka.yaml \\\n    --namespace kpops \\\n    --create-namespace \\\n    --wait \\\n    k8kafka confluentinc/cp-helm-charts\n
    Kafka Helm chart values (kafka.yaml)

    An example value configuration for Confluent's Helm chart. This configuration deploys a single Kafka Broker, a Schema Registry, Zookeeper, Kafka Rest Proxy, and Kafka Connect with minimal resources.

    cp-zookeeper:\n  enabled: true\n  servers: 1\n  imageTag: 7.1.3\n  heapOptions: \"-Xms124M -Xmx124M\"\n  overrideGroupId: k8kafka\n  fullnameOverride: \"k8kafka-cp-zookeeper\"\n  resources:\n    requests:\n      cpu: 50m\n      memory: 0.2G\n    limits:\n      cpu: 250m\n      memory: 0.2G\n  prometheus:\n    jmx:\n      enabled: false\n\ncp-kafka:\n  enabled: true\n  brokers: 1\n  imageTag: 7.1.3\n  podManagementPolicy: Parallel\n  configurationOverrides:\n    \"auto.create.topics.enable\": false\n    \"offsets.topic.replication.factor\": 1\n    \"transaction.state.log.replication.factor\": 1\n    \"transaction.state.log.min.isr\": 1\n    \"confluent.metrics.reporter.topic.replicas\": 1\n  resources:\n    requests:\n      cpu: 50m\n      memory: 0.5G\n    limits:\n      cpu: 250m\n      memory: 0.5G\n  prometheus:\n    jmx:\n      enabled: false\n  persistence:\n    enabled: false\n\ncp-schema-registry:\n  enabled: true\n  imageTag: 7.1.3\n  fullnameOverride: \"k8kafka-cp-schema-registry\"\n  overrideGroupId: k8kafka\n  kafka:\n    bootstrapServers: \"PLAINTEXT://k8kafka-cp-kafka-headless:9092\"\n  resources:\n    requests:\n      cpu: 50m\n      memory: 0.25G\n    limits:\n      cpu: 250m\n      memory: 0.25G\n  prometheus:\n    jmx:\n      enabled: false\n\ncp-kafka-connect:\n  enabled: true\n  replicaCount: 1\n  image: k3d-kpops-registry.localhost:12345/kafka-connect-jdbc\n  imageTag: 7.1.3\n  fullnameOverride: \"k8kafka-cp-kafka-connect\"\n  overrideGroupId: k8kafka\n  kafka:\n    bootstrapServers: \"PLAINTEXT://k8kafka-cp-kafka-headless:9092\"\n  heapOptions: \"-Xms256M -Xmx256M\"\n  resources:\n    requests:\n      cpu: 500m\n      memory: 0.25G\n    limits:\n      cpu: 500m\n      memory: 0.25G\n  configurationOverrides:\n    \"consumer.max.poll.records\": \"10\"\n    \"consumer.max.poll.interval.ms\": \"900000\"\n    \"config.storage.replication.factor\": \"1\"\n    \"offset.storage.replication.factor\": \"1\"\n    \"status.storage.replication.factor\": \"1\"\n  cp-schema-registry:\n    url: http://k8kafka-cp-schema-registry:8081\n  prometheus:\n    jmx:\n      enabled: false\n\ncp-kafka-rest:\n  enabled: true\n  imageTag: 7.1.3\n  fullnameOverride: \"k8kafka-cp-rest\"\n  heapOptions: \"-Xms256M -Xmx256M\"\n  resources:\n    requests:\n      cpu: 50m\n      memory: 0.25G\n    limits:\n      cpu: 250m\n      memory: 0.5G\n  prometheus:\n    jmx:\n      enabled: false\n\ncp-ksql-server:\n  enabled: false\ncp-control-center:\n  enabled: false\n
    "}, {"location": "user/getting-started/setup/#deploy-streams-explorer", "title": "Deploy Streams Explorer", "text": "

    Streams Explorer allows examining Apache Kafka data pipelines in a Kubernetes cluster including the inspection of schemas and monitoring of metrics. First, add the Helm repository:

    helm repo add streams-explorer https://bakdata.github.io/streams-explorer && \\\nhelm repo update\n

    Below you can find an example for the --values ./streams-explorer.yaml file configuring the deployment accordingly. Now, deploy the service:

    helm upgrade \\\n    --install \\\n    --version 0.2.3 \\\n    --values ./streams-explorer.yaml \\\n    --namespace kpops \\\n    streams-explorer streams-explorer/streams-explorer\n
    Streams Explorer Helm chart values (streams-explorer.yaml)

    An example value configuration for Steams Explorer Helm chart.

    imageTag: \"v2.1.2\"\nconfig:\n   K8S__deployment__cluster: true\n   SCHEMAREGISTRY__url: http://k8kafka-cp-schema-registry.kpops.svc.cluster.local:8081\n   KAFKACONNECT__url: http://k8kafka-cp-kafka-connect.kpops.svc.cluster.local:8083\nresources:\n   requests:\n       cpu: 200m\n       memory: 300Mi\n   limits:\n       cpu: 200m\n       memory: 300Mi\n
    "}, {"location": "user/getting-started/setup/#check-the-status-of-your-deployments", "title": "Check the status of your deployments", "text": "

    Now we will check if all the pods are running in our namespace. You can list all pods in the namespace with this command:

    kubectl --namespace kpops get pods\n

    Then you should see the following output in your terminal:

    NAME                                          READY   STATUS    RESTARTS   AGE\nk8kafka-cp-kafka-connect-8fc7d544f-8pjnt      1/1     Running   0          15m\nk8kafka-cp-zookeeper-0                        1/1     Running   0          15m\nk8kafka-cp-kafka-0                            1/1     Running   0          15m\nk8kafka-cp-schema-registry-588f8c65db-jdwbq   1/1     Running   0          15m\nk8kafka-cp-rest-6bbfd7b645-nwkf8              1/1     Running   0          15m\nstreams-explorer-54db878c67-s8wbz             1/1     Running   0          15m\n

    Pay attention to the STATUS row. The pods should have a status of Running.

    "}, {"location": "user/getting-started/setup/#install-kpops", "title": "Install KPOps", "text": "

    KPOps comes as a PyPI package. You can install it with pip:

    pip install kpops\n
    "}, {"location": "user/getting-started/teardown/", "title": "Teardown resources", "text": ""}, {"location": "user/getting-started/teardown/#kpops-teardown-commands", "title": "KPOps teardown commands", "text": "
    • destroy: Removes Kubernetes resources.
    • reset: Runs destroy, resets the states of Kafka Streams apps and resets offsets to zero.
    • clean: Runs reset and removes all Kafka resources.
    "}, {"location": "user/getting-started/teardown/#kpops-deployed-pipeline", "title": "KPOps-deployed pipeline", "text": "

    The kpops CLI can be used to destroy a pipeline that was previously deployed with KPOps. In case that doesn't work, the pipeline can always be taken down manually with helm (see section Infrastructure).

    1. Export environment variables.

      export DOCKER_REGISTRY=bakdata && \\\nexport NAMESPACE=kpops\n
    2. Navigate to the examples folder. Replace the <name-of-the-example-directory> with the example you want to tear down. For example the atm-fraud-detection.

    3. Remove the pipeline

      # Uncomment 1 line to either destroy, reset or clean.\n\n# poetry run kpops destroy <name-of-the-example-directory>/pipeline.yaml \\\n# poetry run kpops reset <name-of-the-example-directory>/pipeline.yaml \\\n# poetry run kpops clean <name-of-the-example-directory>/pipeline.yaml \\\n--config <name-of-the-example-directory>/config.yaml \\\n--execute\n
    "}, {"location": "user/getting-started/teardown/#infrastructure", "title": "Infrastructure", "text": "

    Delete namespace:

    kubectl delete namespace kpops\n

    Note

    In case kpops destroy is not working one can uninstall the pipeline services one by one. This is equivalent to running kpops destroy. In case a clean uninstall (like the one kpops clean does) is needed, one needs to also delete the topics and schemas created by deployment of the pipeline.

    "}, {"location": "user/getting-started/teardown/#local-cluster", "title": "Local cluster", "text": "

    Delete local cluster:

    k3d cluster delete kpops\n
    "}, {"location": "user/getting-started/teardown/#local-image-registry", "title": "Local image registry", "text": "

    Delete local registry:

    k3d registry delete k3d-kpops-registry.localhost\n
    "}, {"location": "user/migration-guide/v1-v2/", "title": "Migrate from V1 to V2", "text": ""}, {"location": "user/migration-guide/v1-v2/#derive-component-type-automatically-from-class-name", "title": "Derive component type automatically from class name", "text": "

    KPOps automatically infers the component type from the class name. Therefore, the type and schema_type attributes can be removed from your custom components. By convention the type would be the lower, and kebab cased name of the class.

    class MyCoolStreamApp(StreamsApp):\n-    type = \"my-cool-stream-app\"\n+    ...\n

    Because of this new convention producer has been renamed to producer-app. This must be addressed in your pipeline.yaml and defaults.yaml.

    - producer:\n+ producer-app:\n    app:\n        streams:\n        outputTopic: output_topic\n        extraOutputTopics:\n            output_role1: output_topic1\n            output_role2: output_topic2\n
    "}, {"location": "user/migration-guide/v1-v2/#refactor-inputoutput-types", "title": "Refactor input/output types", "text": ""}, {"location": "user/migration-guide/v1-v2/#to-section", "title": "To section", "text": "

    In the to section these have changed:

    • The default type is output
    • If role is set, type is inferred to be extra
    • The type error needs to be defined explicitly
      to:\n    topics:\n      ${pipeline_name}-topic-1:\n-       type: extra\n        role: \"role-1\"\n        ...\n      ${pipeline_name}-topic-2:\n-       type: output\n        ...\n      ${pipeline_name}-topic-3:\n         type: error\n         ...\n
    "}, {"location": "user/migration-guide/v1-v2/#from-section", "title": "From section", "text": "

    In the from section these have changed:

    • The default type is input
    • input-pattern type is replaced by pattern
    • If role is set, type is inferred to be extra
    • If role is set, type is explicitly set to pattern, this would be inferred type extra-pattern
      from:\n    topics:\n      ${pipeline_name}-input-topic:\n-       type: input\n        ...\n      ${pipeline_name}-extra-topic:\n-       type: extra\n        role: topic-role\n        ...\n      ${pipeline_name}-input-pattern-topic:\n-       type: input-pattern\n+       type: pattern\n        ...\n      ${pipeline_name}-extra-pattern-topic:\n-       type: extra-pattern\n+       type: pattern\n        role: some-role\n        ...\n
    "}, {"location": "user/migration-guide/v1-v2/#remove-camel-case-conversion-of-internal-models", "title": "Remove camel case conversion of internal models", "text": "

    All the internal KPOps models are now snake_case, and only Helm/Kubernetes values require camel casing. You can find an example of a pipeline.yaml in the following. Notice that the app section here remains untouched.

    ...\ntype: streams-app\n  name: streams-app\n  namespace: namespace\n  app:\n    streams:\n      brokers: ${brokers}\n      schemaRegistryUrl: ${schema_registry_url}\n     autoscaling:\n      consumerGroup: consumer-group\n      lagThreshold: 0\n      enabled: false\n      pollingInterval: 30\n\n  to:\n    topics:\n      ${pipeline_name}-output-topic:\n        type: error\n-       keySchema: key-schema\n+       key_schema: key-schema\n-       valueSchema: value-schema\n+       value_schema: value-schema\n        partitions_count: 1\n        replication_factor: 1\n        configs:\n          cleanup.policy: compact\n    models:\n      model: model\n  prefix: ${pipeline_name}-\n- repoConfig:\n+ repo_config:\n-   repositoryName: bakdata-streams-bootstrap\n+   repository_name: bakdata-streams-bootstrap\n    url: https://bakdata.github.io/streams-bootstrap/\n-   repoAuthFlags:\n+   repo_auth_flags:\n      username: user\n      password: pass\n      ca_file: /home/user/path/to/ca-file\n      insecure_skip_tls_verify: false\n  version: \"1.0.4\"\n...\n
    "}, {"location": "user/migration-guide/v1-v2/#refactor-handling-of-helm-flags", "title": "Refactor handling of Helm flags", "text": "

    If you are using the KubernetesApp class to define your own Kubernetes resource to deploy, the abstract function get_helm_chart that returns the chart for deploying the app using Helm is now a Python property and renamed to helm_chart.

    class MyCoolApp(KubernetesApp):\n\n+   @property\n    @override\n-   def get_helm_chart(self) -> str:\n+   def helm_chart(self) -> str:\n        return \"./charts/charts-folder\"\n
    "}, {"location": "user/migration-guide/v1-v2/#plural-broker-field-in-pipeline-config", "title": "Plural broker field in pipeline config", "text": "

    Since you can pass a comma separated string of broker address, the broker field in KPOps is now plural. The pluralization has affected multiple areas:

    "}, {"location": "user/migration-guide/v1-v2/#configyaml", "title": "config.yaml", "text": "
      environment: development\n- broker: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n+ brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n  kafka_connect_host: \"http://localhost:8083\"\n  kafka_rest_host: \"http://localhost:8082\"\n  schema_registry_url: \"http://localhost:8081\"\n
    "}, {"location": "user/migration-guide/v1-v2/#pipelineyaml-and-defaultyaml", "title": "pipeline.yaml and default.yaml", "text": "

    The variable is now called brokers.

    ...\n  app:\n    streams:\n-     brokers: ${broker}\n+     brokers: ${brokers}\n      schemaRegistryUrl: ${schema_registry_url}\n    nameOverride: override-with-this-name\n    imageTag: \"1.0.0\"\n...\n
    "}, {"location": "user/migration-guide/v1-v2/#environment-variable", "title": "Environment variable", "text": "

    Previously, if you set the environment variable KPOPS_KAFKA_BROKER, you need to replace that now with KPOPS_KAFKA_BROKERS.

    "}, {"location": "user/migration-guide/v2-v3/", "title": "Migrate from V2 to V3", "text": ""}, {"location": "user/migration-guide/v2-v3/#use-hash-and-trim-long-helm-release-names-instead-of-only-trimming", "title": "Use hash and trim long Helm release names instead of only trimming", "text": "

    KPOps handles long (more than 53 characters) Helm releases names differently. Helm will not find your (long) old release names anymore. Therefore, it is recommended that you should once destroy your pipeline with KPOps v2 to remove old Helm release names. After a clean destroy, re-deploy your pipeline with the KPOps v3.

    For example if you have a component with the Helm release name example-component-name-too-long-fake-fakefakefakefakefake. The new release name will shorten the original name to 52 characters and then replace the last 6 characters of the trimmed name with the first 5 characters of the result of SHA-1(helm_release_name).

    example-component-name-too-long-fake-fakefakef-0a7fc ----> 52 chars\n---------------------------------------------- -----\n  ^Shortened helm_release_name                 ^first 5 characters of SHA1(helm_release_name)\n
    "}, {"location": "user/migration-guide/v2-v3/#create-helmapp-component", "title": "Create HelmApp component", "text": "

    All Helm-specific parts of the built-in KubernetesApp have been extracted to a new child component that is more appropriately named HelmApp. It has to be renamed in your existing pipeline defintions and custom components module.

    "}, {"location": "user/migration-guide/v2-v3/#pipelineyaml", "title": "pipeline.yaml", "text": "
    -- type: kubernetes-app\n+- type: helm-app\n   name: foo\n
    "}, {"location": "user/migration-guide/v2-v3/#custom_modulepy", "title": "custom_module.py", "text": "
    - from kpops.components import KubernetesApp\n+ from kpops.components import HelmApp\n\n\n- class CustomHelmApp(KubernetesApp):\n+ class CustomHelmApp(HelmApp):\n      ...\n
    "}, {"location": "user/migration-guide/v2-v3/#create-streamsbootstrap-component-refactor-cleanup-jobs-as-individual-helmapp", "title": "Create StreamsBootstrap component & refactor cleanup jobs as individual HelmApp", "text": "

    Previously the default KafkaApp component configured the streams-bootstrap Helm Charts. Now, this component is no longer tied to Helm (or Kubernetes). Instead, there is a new StreamsBootstrap component that configures the Helm Chart repository for the components that use it, e.g. StreamsApp and ProducerApp. If you are using non-default values for the Helm Chart repository or version, it has to be updated as shown below.

    "}, {"location": "user/migration-guide/v2-v3/#defaultsyaml", "title": "defaults.yaml", "text": "
      kafka-app:\n    app:\n      streams: ...\n\n+ streams-bootstrap:\n    repo_config: ...\n    version: ...\n
    "}, {"location": "user/migration-guide/v2-v3/#make-kafka-rest-proxy-kafka-connect-hosts-default-and-improve-schema-registry-config", "title": "Make Kafka REST Proxy & Kafka Connect hosts default and improve Schema Registry config", "text": "

    The breaking changes target the config.yaml file:

    • The schema_registry_url is replaced with schema_registry.url (default http://localhost:8081) and schema_registry.enabled (default false).

    • kafka_rest_host is renamed to kafka_rest.url (default http://localhost:8082).

    • kafka_connect_host is replaced with kafka_connect.url (default http://localhost:8083).

    • brokers is renamed to kafka_brokers.

    The environment variable names of these config fields changed respectively. Please refer to the environment variables documentation page to see the newest changes.

    "}, {"location": "user/migration-guide/v2-v3/#configyaml", "title": "config.yaml", "text": "
      environment: development\n- brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n- kafka_rest_host: \"http://my-custom-rest.url:8082\"\n- kafka_connect_host: \"http://my-custom-connect.url:8083\"\n- schema_registry_url: \"http://my-custom-sr.url:8081\"\n+ kafka_brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n+ kafka_rest:\n+   url: \"http://my-custom-rest.url:8082\"\n+ kafka_connect:\n+   url: \"http://my-custom-connect.url:8083\"\n+ schema_registry:\n+   enabled: true\n+   url: \"http://my-custom-sr.url:8081\"\n
    "}, {"location": "user/migration-guide/v2-v3/#pipelineyaml-and-defaultyaml", "title": "pipeline.yaml and default.yaml", "text": "

    The variable is now called kafka_brokers.

    ...\n  app:\n    streams:\n-     brokers: ${brokers}\n+     brokers: ${kafka_brokers}\n      schemaRegistryUrl: ${schema_registry_url}\n    nameOverride: override-with-this-name\n    imageTag: \"1.0.0\"\n...\n
    "}, {"location": "user/migration-guide/v2-v3/#define-custom-components-module-pipeline-base-dir-globally", "title": "Define custom components module & pipeline base dir globally", "text": "

    Warning

    The previous CLI parameters have been removed.

    The options for a custom components_module and pipeline_base_dir are now global settings, defined in config.yaml.

    "}, {"location": "user/migration-guide/v2-v3/#configyaml_1", "title": "config.yaml", "text": "
      kafka_brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n  environment: development\n+ components_module: components\n+ pipeline_base_dir: pipelines\n
    "}, {"location": "user/migration-guide/v2-v3/#move-github-action-to-repsitory-root", "title": "Move GitHub action to repsitory root", "text": "

    The location of the GitHub action has changed, and it's now available directly as bakdata/kpops.

    You'll need to change it in your GitHub CI workflows.

    steps:\n  - name: kpops deploy\n-   uses: bakdata/kpops/actions/kpops-runner@main\n+   uses: bakdata/kpops@main\n    with:\n      command: deploy --execute\n      # ...\n
    "}, {"location": "user/migration-guide/v2-v3/#allow-overriding-config-files", "title": "Allow overriding config files", "text": "

    Specifying the environment is no longer mandatory. If not defined, only the global files will be used.

    environment is no longer specified in config.yaml. Instead, it can be either set via the CLI flag --environment or with the environment variable KPOPS_ENVIRONMENT.

    The --config flag in the CLI now points to the directory that contains config*.yaml files. The files to be used are resolved based on the provided (or not) environment.

    "}, {"location": "user/migration-guide/v2-v3/#configyaml_2", "title": "config.yaml", "text": "
    - environment: development\n  kafka_brokers: \"http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092\"\n  schema_registry:\n    enabled: true\n    url: \"http://my-custom-sr.url:8081\"\n
    "}, {"location": "user/migration-guide/v2-v3/#change-substitution-variables-separator-to", "title": "Change substitution variables separator to .", "text": "

    The delimiter in the substitution variables is changed to ..

    "}, {"location": "user/migration-guide/v2-v3/#pipelineyaml-and-defaultyaml_1", "title": "pipeline.yaml and default.yaml", "text": "
    steps:\n  - type: scheduled-producer\n    app:\n      labels:\n-       app_type: \"${component_type}\"\n-       app_name: \"${component_name}\"\n-       app_schedule: \"${component_app_schedule}\"\n+       app_type: \"${component.type}\"\n+       app_name: \"${component.name}\"\n+       app_schedule: \"${component.app.schedule}\"\n
    "}, {"location": "user/migration-guide/v2-v3/#configyaml_3", "title": "config.yaml", "text": "
    topic_name_config:\n- default_error_topic_name: \"${pipeline_name}-${component_name}-dead-letter-topic\"\n- default_output_topic_name: \"${pipeline_name}-${component_name}-topic\"\n+ default_error_topic_name: \"${pipeline_name}-${component.name}-dead-letter-topic\"\n+ default_output_topic_name: \"${pipeline_name}-${component.name}-topic\"\n
    "}, {"location": "user/migration-guide/v2-v3/#refactor-generate-template-for-python-api-usage", "title": "Refactor generate template for Python API usage", "text": "

    The template method of every pipeline component has been renamed to manifest as it is no longer strictly tied to Helm template. Instead, it can be used to render the final resources of a component, such as Kubernetes manifests.

    There is also a new kpops manifest command replacing the existing kpops generate --template flag.

    If you're using this functionality in your custom components, it needs to be updated.

      from kpops.components.base_components.models.resource import Resource\n\n  @override\n- def template(self) -> None:\n+ def manifest(self) -> Resource:\n  \"\"\"Render final component resources, e.g. Kubernetes manifests.\"\"\"\n      return []  # list of manifests\n
    "}, {"location": "user/migration-guide/v2-v3/#namespace-substitution-vars", "title": "Namespace substitution vars", "text": "

    The global configuration variables are now namespaced under the config key, such as ${config.kafka_brokers}, ${config.schema_registry.url}. Same with pipeline variables, e.g. ${pipeline_name} \u2192 ${pipeline.name}. This would make it more uniform with the existing ${component.<key>} variables.

    "}, {"location": "user/migration-guide/v2-v3/#pipelineyaml_1", "title": "pipeline.yaml", "text": "
      name: kafka-app\n- prefix: ${pipeline_name}-\n+ prefix: ${pipeline.name}-\n  app:\n    streams:\n-     brokers: ${kafka_brokers}\n-     schemaRegistryUrl: ${schema_registry.url}\n+     brokers: ${config.kafka_brokers}\n+     schemaRegistryUrl: ${config.schema_registry.url}\n
    "}, {"location": "user/references/cli-commands/", "title": "CLI Usage", "text": "

    Usage:

    $ kpops [OPTIONS] COMMAND [ARGS]...\n

    Options:

    • -V, --version: Print KPOps version
    • --install-completion: Install completion for the current shell.
    • --show-completion: Show completion for the current shell, to copy it or customize the installation.
    • --help: Show this message and exit.

    Commands:

    • clean: Clean pipeline steps
    • deploy: Deploy pipeline steps
    • destroy: Destroy pipeline steps
    • generate: Generate enriched pipeline representation
    • manifest: Render final resource representation
    • reset: Reset pipeline steps
    • schema: Generate JSON schema.
    "}, {"location": "user/references/cli-commands/#kpops-clean", "title": "kpops clean", "text": "

    Clean pipeline steps

    Usage:

    $ kpops clean [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --dry-run / --execute: Whether to dry run the command or execute it [default: dry-run]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --parallel / --no-parallel: Run the command in parallel [default: no-parallel]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-deploy", "title": "kpops deploy", "text": "

    Deploy pipeline steps

    Usage:

    $ kpops deploy [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --dry-run / --execute: Whether to dry run the command or execute it [default: dry-run]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --parallel / --no-parallel: Run the command in parallel [default: no-parallel]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-destroy", "title": "kpops destroy", "text": "

    Destroy pipeline steps

    Usage:

    $ kpops destroy [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --dry-run / --execute: Whether to dry run the command or execute it [default: dry-run]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --parallel / --no-parallel: Run the command in parallel [default: no-parallel]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-generate", "title": "kpops generate", "text": "

    Enrich pipeline steps with defaults. The enriched pipeline is used for all KPOps operations (deploy, destroy, ...).

    Usage:

    $ kpops generate [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --output / --no-output: Enable output printing [default: output]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-manifest", "title": "kpops manifest", "text": "

    In addition to generate, render final resource representation for each pipeline step, e.g. Kubernetes manifests.

    Usage:

    $ kpops manifest [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --output / --no-output: Enable output printing [default: output]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-reset", "title": "kpops reset", "text": "

    Reset pipeline steps

    Usage:

    $ kpops reset [OPTIONS] PIPELINE_PATH\n

    Arguments:

    • PIPELINE_PATH: Path to YAML with pipeline definition [env var: KPOPS_PIPELINE_PATH;required]

    Options:

    • --dotenv FILE: Path to dotenv file. Multiple files can be provided. The files will be loaded in order, with each file overriding the previous one. [env var: KPOPS_DOTENV_PATH]
    • --defaults DIRECTORY: Path to defaults folder [env var: KPOPS_DEFAULT_PATH]
    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --steps TEXT: Comma separated list of steps to apply the command on [env var: KPOPS_PIPELINE_STEPS]
    • --filter-type [include|exclude]: Whether the --steps option should include/exclude the steps [default: include]
    • --environment TEXT: The environment you want to generate and deploy the pipeline to. Suffix your environment files with this value (e.g. defaults_development.yaml for environment=development). [env var: KPOPS_ENVIRONMENT]
    • --dry-run / --execute: Whether to dry run the command or execute it [default: dry-run]
    • --verbose / --no-verbose: Enable verbose printing [default: no-verbose]
    • --parallel / --no-parallel: Run the command in parallel [default: no-parallel]
    • --help: Show this message and exit.
    "}, {"location": "user/references/cli-commands/#kpops-schema", "title": "kpops schema", "text": "

    Generate JSON schema.

    The schemas can be used to enable support for KPOps files in a text editor.

    Usage:

    $ kpops schema [OPTIONS] SCOPE:{pipeline|defaults|config}\n

    Arguments:

    • SCOPE:{pipeline|defaults|config}: Scope of the generated schema
      pipeline: Schema of PipelineComponents. Includes the built-in KPOps components by default. To include custom components, provide components module in config.\n\nconfig: Schema of KpopsConfig.  [required]\n

    Options:

    • --config DIRECTORY: Path to the dir containing config.yaml files [env var: KPOPS_CONFIG_PATH; default: .]
    • --include-stock-components / --no-include-stock-components: Include the built-in KPOps components. [default: include-stock-components]
    • --help: Show this message and exit.
    "}, {"location": "user/references/editor-integration/", "title": "Editor integration", "text": "

    KPOps provides JSON schemas that enable autocompletion and validation for all YAML files that the user must work with.

    "}, {"location": "user/references/editor-integration/#supported-files", "title": "Supported files", "text": "
    • pipeline.yaml
    • defaults.yaml
    • config.yaml
    "}, {"location": "user/references/editor-integration/#usage", "title": "Usage", "text": "
    1. Install the yaml-language-server in your editor of choice. (requires LSP support)
    2. Configure the extension with the settings below.
    settings.json
    {\n    \"yaml.schemas\": {\n        \"https://bakdata.github.io/kpops/3.0/schema/pipeline.json\": [\n            \"pipeline.yaml\",\n            \"pipeline_*.yaml\"\n        ],\n        \"https://bakdata.github.io/kpops/3.0/schema/defaults.json\": [\n            \"defaults.yaml\",\n            \"defaults_*.yaml\"\n        ],\n        \"https://bakdata.github.io/kpops/3.0/schema/config.json\": [\n            \"config.yaml\",\n            \"config_*.yaml\"\n        ]\n    }\n}\n

    Advanced usage

    It is possible to generate schemas with the kpops schema command. Useful for including custom components or when using a pre-release version of KPOps.

    "}, {"location": "user/references/ci-integration/github-actions/", "title": "GitHub Actions integration", "text": "

    We provided a GitHub composite action bakdata/kpops that installs and executes KPOps commands with the given parameters.

    "}, {"location": "user/references/ci-integration/github-actions/#input-parameters", "title": "Input Parameters", "text": "Name Required Default Value Type Description command \u2705 - string KPOps command to run. generate, deploy, destroy, reset, clean are possible values. Flags such as --dry-run and --execute need to be specified pipeline \u2705 - string Pipeline to run by KPOps working-directory \u274c . string root directory used by KPOps to run pipelines defaults \u274c - string defaults folder path config \u274c - string Directory containing the config*.yaml file(s) environment \u274c - string Environment to run KPOps in components \u274c - string components package path filter-type \u274c - string Whether to include/exclude the steps defined in KPOPS_PIPELINE_STEPS python-version \u274c \"3.11.x\" string Python version to install (Defaults to the latest stable version of Python 3.11) kpops-version \u274c latest string KPOps version to install helm-version \u274c latest string Helm version to install token \u274c latest string secrets.GITHUB_TOKEN, needed for setup-helm action if helm-version is set to latest"}, {"location": "user/references/ci-integration/github-actions/#usage", "title": "Usage", "text": "
    steps:\n  # ...\n  # This step is useful for debugging reasons\n  - name: Generate Kafka pipeline\n    uses: bakdata/kpops@main\n    with:\n      command: generate\n      working-directory: home/my-kpops-root-dir\n      pipeline: pipelines/my-pipeline-file.yaml\n      kpops-version: 1.2.3\n\n  # It is possible to use a pre-release KPOps version from TestPyPI https://test.pypi.org/project/kpops/#history\n  - name: Deploy Kafka pipeline\n    uses: bakdata/kpops@main\n    with:\n      command: deploy --execute\n      working-directory: home/my-kpops-root-dir\n      pipeline: pipelines/my-pipeline-file.yaml\n      kpops-version:  1.2.5.dev20230707132709\n  # ...\n
    "}]} \ No newline at end of file diff --git a/dev/sitemap.xml b/dev/sitemap.xml index 7560db1cf..a5e939c39 100644 --- a/dev/sitemap.xml +++ b/dev/sitemap.xml @@ -120,6 +120,11 @@ 2024-01-15 daily + + https://bakdata.github.io/kpops/dev/user/core-concepts/components/streams-bootstrap/ + 2024-01-15 + daily + https://bakdata.github.io/kpops/dev/user/core-concepts/variables/environment_variables/ 2024-01-15 diff --git a/dev/sitemap.xml.gz b/dev/sitemap.xml.gz index 3577f99ca..a81963d8c 100644 Binary files a/dev/sitemap.xml.gz and b/dev/sitemap.xml.gz differ diff --git a/dev/user/changelog/index.html b/dev/user/changelog/index.html index 2be96dc11..658128de0 100644 --- a/dev/user/changelog/index.html +++ b/dev/user/changelog/index.html @@ -1423,6 +1423,8 @@ + + @@ -1521,6 +1523,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/core-concepts/components/helm-app/index.html b/dev/user/core-concepts/components/helm-app/index.html index 50ab34309..978d8ce49 100644 --- a/dev/user/core-concepts/components/helm-app/index.html +++ b/dev/user/core-concepts/components/helm-app/index.html @@ -14,7 +14,7 @@ - + @@ -719,6 +719,8 @@ + + @@ -912,6 +914,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/core-concepts/components/kafka-app/index.html b/dev/user/core-concepts/components/kafka-app/index.html index 27e182d8d..cadbd1ec5 100644 --- a/dev/user/core-concepts/components/kafka-app/index.html +++ b/dev/user/core-concepts/components/kafka-app/index.html @@ -11,7 +11,7 @@ - + @@ -719,6 +719,8 @@ + + @@ -816,6 +818,26 @@ + +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + @@ -1765,19 +1787,7 @@

    Configuration51 52 53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66
    # Base component for Kafka-based components.
    +54
    # Base component for Kafka-based components.
     # Producer or streaming apps should inherit from this class.
     - type: kafka-app # required
       name: kafka-app # required
    @@ -1823,26 +1833,14 @@ 

    Configuration cleanup.policy: compact models: # SchemaProvider is initiated with the values given here model: model - namespace: namespace # required - # `app` can contain application-specific settings, hence the user is free to - # add the key-value pairs they need. - app: # required - streams: # required - brokers: ${config.kafka_brokers} # required - schemaRegistryUrl: ${config.schema_registry.url} - nameOverride: override-with-this-name # kafka-app-specific - imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app - # Helm repository configuration (optional) - # If not set the helm repo add will not be called. Useful when using local Helm charts - repo_config: - repository_name: bakdata-streams-bootstrap # required - url: https://bakdata.github.io/streams-bootstrap/ # required - repo_auth_flags: - username: user - password: pass - ca_file: /home/user/path/to/ca-file - insecure_skip_tls_verify: false - version: "2.12.0" # Helm chart version + # `app` can contain application-specific settings, hence the user is free to + # add the key-value pairs they need. + app: # required + streams: # required + brokers: ${config.kafka_brokers} # required + schemaRegistryUrl: ${config.schema_registry.url} + nameOverride: override-with-this-name # kafka-app-specific + imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app

    diff --git a/dev/user/core-concepts/components/kafka-connector/index.html b/dev/user/core-concepts/components/kafka-connector/index.html index 75c12c86b..9b0ec5de9 100644 --- a/dev/user/core-concepts/components/kafka-connector/index.html +++ b/dev/user/core-concepts/components/kafka-connector/index.html @@ -719,6 +719,8 @@ + + @@ -817,6 +819,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/core-concepts/components/kafka-sink-connector/index.html b/dev/user/core-concepts/components/kafka-sink-connector/index.html index e52ea1d94..af81e6bd1 100644 --- a/dev/user/core-concepts/components/kafka-sink-connector/index.html +++ b/dev/user/core-concepts/components/kafka-sink-connector/index.html @@ -719,6 +719,8 @@ + + @@ -817,6 +819,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/core-concepts/components/kafka-source-connector/index.html b/dev/user/core-concepts/components/kafka-source-connector/index.html index 97c7886d0..0159c246b 100644 --- a/dev/user/core-concepts/components/kafka-source-connector/index.html +++ b/dev/user/core-concepts/components/kafka-source-connector/index.html @@ -719,6 +719,8 @@ + + @@ -817,6 +819,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/core-concepts/components/kubernetes-app/index.html b/dev/user/core-concepts/components/kubernetes-app/index.html index 081512b01..ca7802fa3 100644 --- a/dev/user/core-concepts/components/kubernetes-app/index.html +++ b/dev/user/core-concepts/components/kubernetes-app/index.html @@ -719,6 +719,8 @@ + + @@ -912,6 +914,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/core-concepts/components/overview/index.html b/dev/user/core-concepts/components/overview/index.html index 58a4833f1..baef9f790 100644 --- a/dev/user/core-concepts/components/overview/index.html +++ b/dev/user/core-concepts/components/overview/index.html @@ -719,6 +719,8 @@ + + @@ -827,6 +829,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • @@ -1556,10 +1578,13 @@

    Overviewpipeline.yaml.

    flowchart BT
         KubernetesApp --> PipelineComponent
    +    KafkaApp --> PipelineComponent
         HelmApp --> KubernetesApp
    -    KafkaApp --> HelmApp
    +    StreamsBootstrap --> HelmApp
         StreamsApp --> KafkaApp
    +    StreamsApp --> StreamsBootstrap
         ProducerApp --> KafkaApp
    +    ProducerApp --> StreamsBootstrap
         KafkaConnector --> PipelineComponent
         KafkaSourceConnector --> KafkaConnector
         KafkaSinkConnector --> KafkaConnector
    @@ -1567,6 +1592,7 @@ 

    Overview + + + + + StreamsBootstrap + + + + +

  • + + + + + + + + +
  • @@ -1700,7 +1722,7 @@

    ProducerApp

    -

    Subclass of KafkaApp.

    +

    Subclass of KafkaApp and StreamsBootstrap.

    Usage

    Configures a streams-bootstrap Kafka producer app

    Configuration

    diff --git a/dev/user/core-concepts/components/streams-app/index.html b/dev/user/core-concepts/components/streams-app/index.html index e80189548..51fac3ccf 100644 --- a/dev/user/core-concepts/components/streams-app/index.html +++ b/dev/user/core-concepts/components/streams-app/index.html @@ -719,6 +719,8 @@ + + @@ -817,6 +819,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • @@ -1700,7 +1722,7 @@

    StreamsApp

    -

    Subclass of KafkaApp.

    +

    Subclass of KafkaApp and StreamsBootstrap.

    Usage

    Configures a streams-bootstrap diff --git a/dev/user/core-concepts/components/streams-bootstrap/index.html b/dev/user/core-concepts/components/streams-bootstrap/index.html new file mode 100644 index 000000000..65148a8c4 --- /dev/null +++ b/dev/user/core-concepts/components/streams-bootstrap/index.html @@ -0,0 +1,1778 @@ + + + + + + + + + + + + + + + + + + + + + + + + + StreamsBootstrap - KPOps + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +
    + +
    + + + + + + +
    + + +
    + +
    + + + + + + + + + +
    +
    + + + +
    +
    +
    + + + + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + +

    StreamsApp

    +

    Subclass of HelmApp.

    +

    Usage

    +

    Configures a Helm app with streams-bootstrap Helm charts.

    +

    Operations

    +

    deploy

    +

    Deploy using Helm.

    +

    destroy

    +

    Uninstall Helm release.

    +

    reset

    +

    Do nothing.

    +

    clean

    +

    Do nothing.

    + + + + + + +
    +
    + + +
    + + + +
    + + + +
    +
    +
    +
    + + + + + + + + + + \ No newline at end of file diff --git a/dev/user/core-concepts/config/index.html b/dev/user/core-concepts/config/index.html index 709402816..7eebb4557 100644 --- a/dev/user/core-concepts/config/index.html +++ b/dev/user/core-concepts/config/index.html @@ -717,6 +717,8 @@ + + @@ -815,6 +817,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/core-concepts/defaults/index.html b/dev/user/core-concepts/defaults/index.html index d290e85fe..e6a668cfd 100644 --- a/dev/user/core-concepts/defaults/index.html +++ b/dev/user/core-concepts/defaults/index.html @@ -717,6 +717,8 @@ + + @@ -815,6 +817,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • @@ -1922,20 +1944,102 @@

    KafkaApp11 12 13 -14
    # Base component for Kafka-based components.
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    # Base component for Kafka-based components.
     #
     # Parent of: ProducerApp, StreamsApp
     # Child of: KubernetesApp
     kafka-app:
    -  # `app` can contain application-specific settings, hence  the user is free to
    -  # add the key-value pairs they need.
    -  app: # required
    -    streams: # required
    -      brokers: ${config.kafka_brokers} # required
    -      schemaRegistryUrl: ${config.schema_registry.url}
    -    nameOverride: override-with-this-name # kafka-app-specific
    -    imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app
    -  version: "2.12.0" # Helm chart version
    +  # Pipeline prefix that will prefix every component name. If you wish to not
    +  # have any prefix you can specify an empty string.
    +  prefix: ${pipeline.name}-
    +  from: # Must not be null
    +    topics: # read from topic
    +      ${pipeline.name}-input-topic:
    +        type: input # Implied when role is NOT specified
    +      ${pipeline.name}-extra-topic:
    +        role: topic-role # Implies `type` to be extra
    +      ${pipeline.name}-input-pattern-topic:
    +        type: pattern # Implied to be an input pattern if `role` is undefined
    +      ${pipeline.name}-extra-pattern-topic:
    +        type: pattern # Implied to be an extra pattern if `role` is defined
    +        role: some-role
    +    components: # read from specific component
    +      account-producer:
    +        type: output # Implied when role is NOT specified
    +      other-producer:
    +        role: some-role # Implies `type` to be extra
    +      component-as-input-pattern:
    +        type: pattern # Implied to be an input pattern if `role` is undefined
    +      component-as-extra-pattern:
    +        type: pattern # Implied to be an extra pattern if `role` is defined
    +        role: some-role
    +  # Topic(s) into which the component will write output
    +  to:
    +    topics:
    +      ${pipeline.name}-output-topic:
    +        type: output # Implied when role is NOT specified
    +      ${pipeline.name}-extra-topic:
    +        role: topic-role # Implies `type` to be extra; Will throw an error if `type` is defined
    +      ${pipeline.name}-error-topic:
    +        type: error
    +        # Currently KPOps supports Avro and JSON schemas.
    +        key_schema: key-schema # must implement SchemaProvider to use
    +        value_schema: value-schema
    +        partitions_count: 1
    +        replication_factor: 1
    +        configs: # https://kafka.apache.org/documentation/#topicconfigs
    +          cleanup.policy: compact
    +    models: # SchemaProvider is initiated with the values given here
    +      model: model
    +  # `app` can contain application-specific settings, hence  the user is free to
    +  # add the key-value pairs they need.
    +  app: # required
    +    streams: # required
    +      brokers: ${config.kafka_brokers} # required
    +      schemaRegistryUrl: ${config.schema_registry.url}
    +    nameOverride: override-with-this-name # kafka-app-specific
    +    imageTag: "1.0.0" # Example values that are shared between streams-app and producer-app
     
    diff --git a/dev/user/core-concepts/variables/environment_variables/index.html b/dev/user/core-concepts/variables/environment_variables/index.html index e608fb50f..4ea98b780 100644 --- a/dev/user/core-concepts/variables/environment_variables/index.html +++ b/dev/user/core-concepts/variables/environment_variables/index.html @@ -717,6 +717,8 @@ + + @@ -815,6 +817,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/core-concepts/variables/substitution/index.html b/dev/user/core-concepts/variables/substitution/index.html index a73e57919..95c524b9f 100644 --- a/dev/user/core-concepts/variables/substitution/index.html +++ b/dev/user/core-concepts/variables/substitution/index.html @@ -717,6 +717,8 @@ + + @@ -815,6 +817,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/examples/atm-fraud-pipeline/index.html b/dev/user/examples/atm-fraud-pipeline/index.html index 164c92f34..7b2a81a72 100644 --- a/dev/user/examples/atm-fraud-pipeline/index.html +++ b/dev/user/examples/atm-fraud-pipeline/index.html @@ -859,6 +859,8 @@ + + @@ -957,6 +959,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/getting-started/quick-start/index.html b/dev/user/getting-started/quick-start/index.html index 32434d5af..3486b31bd 100644 --- a/dev/user/getting-started/quick-start/index.html +++ b/dev/user/getting-started/quick-start/index.html @@ -866,6 +866,8 @@ + + @@ -964,6 +966,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/getting-started/setup/index.html b/dev/user/getting-started/setup/index.html index ac7e03be0..43e91fa22 100644 --- a/dev/user/getting-started/setup/index.html +++ b/dev/user/getting-started/setup/index.html @@ -799,6 +799,8 @@ + + @@ -897,6 +899,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/getting-started/teardown/index.html b/dev/user/getting-started/teardown/index.html index 407779928..3e1103562 100644 --- a/dev/user/getting-started/teardown/index.html +++ b/dev/user/getting-started/teardown/index.html @@ -792,6 +792,8 @@ + + @@ -890,6 +892,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/migration-guide/v1-v2/index.html b/dev/user/migration-guide/v1-v2/index.html index 50ea124b7..f3c3e5300 100644 --- a/dev/user/migration-guide/v1-v2/index.html +++ b/dev/user/migration-guide/v1-v2/index.html @@ -715,6 +715,8 @@ + + @@ -813,6 +815,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • diff --git a/dev/user/migration-guide/v2-v3/index.html b/dev/user/migration-guide/v2-v3/index.html index b58bf28c2..bb8d6ca5c 100644 --- a/dev/user/migration-guide/v2-v3/index.html +++ b/dev/user/migration-guide/v2-v3/index.html @@ -715,6 +715,8 @@ + + @@ -813,6 +815,26 @@ +
  • + + + + + StreamsBootstrap + + + + +
  • + + + + + + + + +
  • @@ -1272,6 +1294,26 @@ +
  • + +
  • + + Create StreamsBootstrap component & refactor cleanup jobs as individual HelmApp + + + +
  • @@ -1765,6 +1807,26 @@ +
  • + +
  • + + Create StreamsBootstrap component & refactor cleanup jobs as individual HelmApp + + + +
  • @@ -1951,6 +2013,23 @@

    custom_module.py+ class CustomHelmApp(HelmApp): ... +

    Create StreamsBootstrap component & refactor cleanup jobs as individual HelmApp

    +

    Previously the default KafkaApp component configured the streams-bootstrap Helm Charts. Now, this component is no longer tied to Helm (or Kubernetes). Instead, there is a new StreamsBootstrap component that configures the Helm Chart repository for the components that use it, e.g. StreamsApp and ProducerApp. If you are using non-default values for the Helm Chart repository or version, it has to be updated as shown below.

    +

    defaults.yaml

    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
      kafka-app:
    +    app:
    +      streams: ...
    +
    ++ streams-bootstrap:
    +    repo_config: ...
    +    version: ...
    +

    Make Kafka REST Proxy & Kafka Connect hosts default and improve Schema Registry config

    The breaking changes target the config.yaml file:

      @@ -1969,51 +2048,51 @@

      environment variables documentation page to see the newest changes.

      config.yaml

      -
       1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
      -10
      -11
      -12
      -13
        environment: development
      -- brokers: "http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092"
      -- kafka_rest_host: "http://my-custom-rest.url:8082"
      -- kafka_connect_host: "http://my-custom-connect.url:8083"
      -- schema_registry_url: "http://my-custom-sr.url:8081"
      -+ kafka_brokers: "http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092"
      -+ kafka_rest:
      -+   url: "http://my-custom-rest.url:8082"
      -+ kafka_connect:
      -+   url: "http://my-custom-connect.url:8083"
      -+ schema_registry:
      -+   enabled: true
      -+   url: "http://my-custom-sr.url:8081"
      +
       1
      + 2
      + 3
      + 4
      + 5
      + 6
      + 7
      + 8
      + 9
      +10
      +11
      +12
      +13
        environment: development
      +- brokers: "http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092"
      +- kafka_rest_host: "http://my-custom-rest.url:8082"
      +- kafka_connect_host: "http://my-custom-connect.url:8083"
      +- schema_registry_url: "http://my-custom-sr.url:8081"
      ++ kafka_brokers: "http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092"
      ++ kafka_rest:
      ++   url: "http://my-custom-rest.url:8082"
      ++ kafka_connect:
      ++   url: "http://my-custom-connect.url:8083"
      ++ schema_registry:
      ++   enabled: true
      ++   url: "http://my-custom-sr.url:8081"
       

      pipeline.yaml and default.yaml

      The variable is now called kafka_brokers.

      -
      1
      -2
      -3
      -4
      -5
      -6
      -7
      -8
      -9
      ...
      -  app:
      -    streams:
      --     brokers: ${brokers}
      -+     brokers: ${kafka_brokers}
      -      schemaRegistryUrl: ${schema_registry_url}
      -    nameOverride: override-with-this-name
      -    imageTag: "1.0.0"
      -...
      +
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      ...
      +  app:
      +    streams:
      +-     brokers: ${brokers}
      ++     brokers: ${kafka_brokers}
      +      schemaRegistryUrl: ${schema_registry_url}
      +    nameOverride: override-with-this-name
      +    imageTag: "1.0.0"
      +...
       

      Define custom components module & pipeline base dir globally

      @@ -2026,119 +2105,119 @@

      config.yaml

      -
      1
      -2
      -3
      -4
        kafka_brokers: "http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092"
      -  environment: development
      -+ components_module: components
      -+ pipeline_base_dir: pipelines
      +
      1
      +2
      +3
      +4
        kafka_brokers: "http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092"
      +  environment: development
      ++ components_module: components
      ++ pipeline_base_dir: pipelines
       

      Move GitHub action to repsitory root

      The location of the GitHub action has changed, and it's now available directly as bakdata/kpops.

      You'll need to change it in your GitHub CI workflows.

      -
      1
      -2
      -3
      -4
      -5
      -6
      -7
      steps:
      -  - name: kpops deploy
      --   uses: bakdata/kpops/actions/kpops-runner@main
      -+   uses: bakdata/kpops@main
      -    with:
      -      command: deploy --execute
      -      # ...
      +
      1
      +2
      +3
      +4
      +5
      +6
      +7
      steps:
      +  - name: kpops deploy
      +-   uses: bakdata/kpops/actions/kpops-runner@main
      ++   uses: bakdata/kpops@main
      +    with:
      +      command: deploy --execute
      +      # ...
       

      Allow overriding config files

      Specifying the environment is no longer mandatory. If not defined, only the global files will be used.

      environment is no longer specified in config.yaml. Instead, it can be either set via the CLI flag --environment or with the environment variable KPOPS_ENVIRONMENT.

      The --config flag in the CLI now points to the directory that contains config*.yaml files. The files to be used are resolved based on the provided (or not) environment.

      config.yaml

      -
      1
      -2
      -3
      -4
      -5
      - environment: development
      -  kafka_brokers: "http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092"
      -  schema_registry:
      -    enabled: true
      -    url: "http://my-custom-sr.url:8081"
      +
      1
      +2
      +3
      +4
      +5
      - environment: development
      +  kafka_brokers: "http://k8kafka-cp-kafka-headless.kpops.svc.cluster.local:9092"
      +  schema_registry:
      +    enabled: true
      +    url: "http://my-custom-sr.url:8081"
       

      Change substitution variables separator to .

      The delimiter in the substitution variables is changed to ..

      pipeline.yaml and default.yaml

      -
       1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
      -10
      steps:
      -  - type: scheduled-producer
      -    app:
      -      labels:
      --       app_type: "${component_type}"
      --       app_name: "${component_name}"
      --       app_schedule: "${component_app_schedule}"
      -+       app_type: "${component.type}"
      -+       app_name: "${component.name}"
      -+       app_schedule: "${component.app.schedule}"
      +
       1
      + 2
      + 3
      + 4
      + 5
      + 6
      + 7
      + 8
      + 9
      +10
      steps:
      +  - type: scheduled-producer
      +    app:
      +      labels:
      +-       app_type: "${component_type}"
      +-       app_name: "${component_name}"
      +-       app_schedule: "${component_app_schedule}"
      ++       app_type: "${component.type}"
      ++       app_name: "${component.name}"
      ++       app_schedule: "${component.app.schedule}"
       

      config.yaml

      -
      1
      -2
      -3
      -4
      -5
      topic_name_config:
      -- default_error_topic_name: "${pipeline_name}-${component_name}-dead-letter-topic"
      -- default_output_topic_name: "${pipeline_name}-${component_name}-topic"
      -+ default_error_topic_name: "${pipeline_name}-${component.name}-dead-letter-topic"
      -+ default_output_topic_name: "${pipeline_name}-${component.name}-topic"
      -
      -

      Refactor generate template for Python API usage

      -

      The template method of every pipeline component has been renamed to manifest as it is no longer strictly tied to Helm template. Instead, it can be used to render the final resources of a component, such as Kubernetes manifests.

      -

      There is also a new kpops manifest command replacing the existing kpops generate --template flag.

      -

      If you're using this functionality in your custom components, it needs to be updated.

      1
       2
       3
       4
      -5
      -6
      -7
        from kpops.components.base_components.models.resource import Resource
      -
      -  @override
      -- def template(self) -> None:
      -+ def manifest(self) -> Resource:
      -  """Render final component resources, e.g. Kubernetes manifests."""
      -      return []  # list of manifests
      +5
      topic_name_config:
      +- default_error_topic_name: "${pipeline_name}-${component_name}-dead-letter-topic"
      +- default_output_topic_name: "${pipeline_name}-${component_name}-topic"
      ++ default_error_topic_name: "${pipeline_name}-${component.name}-dead-letter-topic"
      ++ default_output_topic_name: "${pipeline_name}-${component.name}-topic"
       
      -

      Namespace substitution vars

      -

      The global configuration variables are now namespaced under the config key, such as ${config.kafka_brokers}, ${config.schema_registry.url}. Same with pipeline variables, e.g. ${pipeline_name} → ${pipeline.name}. -This would make it more uniform with the existing ${component.<key>} variables.

      -

      pipeline.yaml

      +

      Refactor generate template for Python API usage

      +

      The template method of every pipeline component has been renamed to manifest as it is no longer strictly tied to Helm template. Instead, it can be used to render the final resources of a component, such as Kubernetes manifests.

      +

      There is also a new kpops manifest command replacing the existing kpops generate --template flag.

      +

      If you're using this functionality in your custom components, it needs to be updated.

      1
       2
       3
       4
       5
       6
      -7
      -8
      -9
        name: kafka-app
      -- prefix: ${pipeline_name}-
      -+ prefix: ${pipeline.name}-
      -  app:
      -    streams:
      --     brokers: ${kafka_brokers}
      --     schemaRegistryUrl: ${schema_registry.url}
      -+     brokers: ${config.kafka_brokers}
      -+     schemaRegistryUrl: ${config.schema_registry.url}
      +7
        from kpops.components.base_components.models.resource import Resource
      +
      +  @override
      +- def template(self) -> None:
      ++ def manifest(self) -> Resource:
      +  """Render final component resources, e.g. Kubernetes manifests."""
      +      return []  # list of manifests
      +
      +

      Namespace substitution vars

      +

      The global configuration variables are now namespaced under the config key, such as ${config.kafka_brokers}, ${config.schema_registry.url}. Same with pipeline variables, e.g. ${pipeline_name} → ${pipeline.name}. +This would make it more uniform with the existing ${component.<key>} variables.

      +

      pipeline.yaml

      +
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
        name: kafka-app
      +- prefix: ${pipeline_name}-
      ++ prefix: ${pipeline.name}-
      +  app:
      +    streams:
      +-     brokers: ${kafka_brokers}
      +-     schemaRegistryUrl: ${schema_registry.url}
      ++     brokers: ${config.kafka_brokers}
      ++     schemaRegistryUrl: ${config.schema_registry.url}
       
      diff --git a/dev/user/references/ci-integration/github-actions/index.html b/dev/user/references/ci-integration/github-actions/index.html index 845ccf257..4ba91098c 100644 --- a/dev/user/references/ci-integration/github-actions/index.html +++ b/dev/user/references/ci-integration/github-actions/index.html @@ -715,6 +715,8 @@ + + @@ -813,6 +815,26 @@ +
    • + + + + + StreamsBootstrap + + + + +
    • + + + + + + + + +
    • diff --git a/dev/user/references/cli-commands/index.html b/dev/user/references/cli-commands/index.html index 6e1ff3eb6..5aeb699a0 100644 --- a/dev/user/references/cli-commands/index.html +++ b/dev/user/references/cli-commands/index.html @@ -715,6 +715,8 @@ + + @@ -813,6 +815,26 @@ +
    • + + + + + StreamsBootstrap + + + + +
    • + + + + + + + + +
    • diff --git a/dev/user/references/editor-integration/index.html b/dev/user/references/editor-integration/index.html index 5619b91bb..62ecfabc8 100644 --- a/dev/user/references/editor-integration/index.html +++ b/dev/user/references/editor-integration/index.html @@ -715,6 +715,8 @@ + + @@ -813,6 +815,26 @@ +
    • + + + + + StreamsBootstrap + + + + +
    • + + + + + + + + +
    • diff --git a/dev/user/what-is-kpops/index.html b/dev/user/what-is-kpops/index.html index d0b37dd34..3f2faca49 100644 --- a/dev/user/what-is-kpops/index.html +++ b/dev/user/what-is-kpops/index.html @@ -769,6 +769,8 @@ + + @@ -867,6 +869,26 @@ +
    • + + + + + StreamsBootstrap + + + + +
    • + + + + + + + + +