Skip to content

0.18.0

This page documents the changes in Kannika Armory version 0.18.0.

  • Restore: Topic:DescribeConfigs on the target topic is now a hard requirement. A restore that cannot read the target topic’s configuration fails that topic before initializing plugins, and reports the permission to grant. It previously continued with an empty configuration, or failed later in the topic retention plugin with a misleading retention.ms error. Only that topic fails, the other topics in the same restore continue. See the required permissions for the full list.

  • Operator: the S3 credentials of a backup or restore are now mounted from the Credentials Secret under /var/run/secrets/kannika.io/, following the Kubernetes convention for secret material, and referenced by path from the storage configuration. accessKeyIdFrom and secretAccessKeyFrom are unchanged, and IRSA and EKS Pod Identity keep working. Schema registry backups and restores are not affected.

  • Operator: sourceAdditionalProps and sinkAdditionalProps are rejected on S3 storage endpoints. An S3 endpoint is fully described by its typed configuration, and additional properties could override the credential file paths introduced in this release. A backup or restore that still carries them reports ConfigurationValid: False naming the offending keys, and its workload is not deployed or updated until they are removed. Additional properties keep working on Kafka event hubs.

  • GraphQL: removed parallelism and maxProducers from ConfigureRestoreOptionsInput. A configureRestoreOptions call that still passes either field fails schema validation. Use the new configureRestorePerformance mutation instead. Restores configured through their manifest are unaffected.

  • Operator: Kafka properties are validated before a backup or restore is deployed. A property unknown to librdkafka previously crashed the replacement pod on startup while the old pod kept running. Such a property now sets ConfigurationValid: False naming the offending keys, and the workload is not deployed or updated until it is removed. Properties that only exist in the Java Kafka client, such as sasl.jaas.config, are omitted from the engine configuration instead of being rejected.

  • Backup: topic discovery through selectors no longer retries silently when the topics cannot be listed. Listing failures are logged as errors from the first attempt and retried for five minutes, after which a backup that streams no topics stops and reports that it could not fetch topic metadata, along with the causes to verify. A backup that streams at least one topic keeps running and picks up new topics again once discovery recovers. A new job-level backup_discovery_state gauge exposes the discovery state on the pod’s metrics endpoint.

  • API: a CA certificate set through the ssl.ca.pem property of a Kafka event hub is now trusted by the connection test and by topic listing. A truststore provided through Credentials keeps precedence.

  • API: the connection test of a Kafka event hub ignores properties that only exist in librdkafka, such as ssl.ca.location or the callback settings. The properties are stored unchanged and still reach backups and restores as configured.

  • GraphQL: added the configureRestorePerformance mutation.

  • GraphQL: added the ConfigureRestorePerformanceInput input type with restoreName, parallelism, and maxProducers.

  • GraphQL: added the ConfigureRestorePerformancePayload union of RestorePerformanceConfigured and RestorePerformanceConfigurationFailed.

  • GraphQL: added the RestorePerformanceConfigured type.

  • GraphQL: added the RestorePerformanceConfigurationFailed type.

  • GraphQL: added the RestorePerformanceConfigurationProblem type.

  • GraphQL: added the RestorePerformanceConfigurationProblemType enum with RESTORE_NOT_FOUND and RESTORE_ALREADY_STARTED.

  • GraphQL: added SSL_REQUIRED to the ConnectionTestFailedProblemType enum.

  • API: custom CA certificates can now be provided through a ConfigMap with api.config.tls.customCaCertificates.configMapName, as an alternative to the existing secretName.

  • Restore: the Add topics dialog shows both the topic size and the storage size it occupies in the backup storage, instead of one ambiguous size.

  • Backup and Restore: the Add topics dialogs sort by column, and a topic is selected by clicking anywhere on its row.

  • Event hub: editing Kafka properties keeps line breaks in multi-line values. The value field grows with its content and scrolls beyond eight lines.

  • Long property values no longer stretch the General tab of an event hub, backup, or restore beyond the page width.

  • Credential and certificate files are mounted under /var/run/secrets/kannika.io/ instead of /etc/kannika/, following the Kubernetes convention for secret material. Nothing changes in your manifests, the affected pods roll once on upgrade.

  • The CA certificate, client certificate, and private key of SASL sslConf and mTLS Credentials are mounted from their Secrets and referenced through the ssl.*.location properties, instead of being written into the backup or restore ConfigMap. This keeps client private keys out of a plaintext ConfigMap. An explicit caCertificateLocation keeps precedence and suppresses the CA mount. Rotating a Secret still restarts the pod.

  • Restore: the failure reasons for a missing topic, a topic missing from the backup, an unreadable topic configuration, and a failed metadata fetch now carry hints naming the likely cause. A target topic that cannot be found suggests that the principal may not be allowed to describe it, since Kafka omits topics a principal cannot describe rather than refusing the request.

  • Backup: segmentRolloverTriggers.timeoutSeconds is evaluated on every message, so streams that never go idle roll over on time as well. It previously only took effect once a stream became idle, so more data could be added to a segment before flushing it. A stream receiving a steady trickle of data, for example one message every 500 milliseconds, never went idle for a full second, so the timeout never fired and its slowly filling segment stayed open. Data loss could occur in the very rare scenario where such a backup was hit by an abnormal interruption, such as a crash or a node failure, before that segment was flushed.

  • Backup: the monitoring sidecar limits how much data its Kafka consumer fetches and queues, which keeps its memory usage low for backups with many partitions.

  • Backup and Restore: a Kafka client error that repeats many times per second, such as an unreachable broker, is logged once, then suppressed, with a summary line once per minute for as long as the error persists. A backup logs when topic discovery recovers, and when records flow again after consumer errors.

  • API: the connection test reports SSL_REQUIRED when a plaintext connection times out against a listener that speaks TLS, instead of a generic time-out.

  • API: a SASL Credentials resource with an sslConf that has no explicit enabled field no longer causes an internal server error on the connection test. It is treated as enabled, matching the CRD and the operator.

  • API: ingestion rates are clamped to zero after a worker restart resets the byte counters, instead of reporting a negative rate.

  • Restore: after a restore resumes, the last restored offset of a partition that was fully restored before the interruption is reported again instead of -1.

  • Operator: a resource whose manifest cannot be read into its resource type, for example a backup with a field of the wrong type that passed CRD validation, now reports ConfigurationValid: False naming the offending field. Such a resource previously stalled the operator for every resource of the same kind, so no other backup, restore, or storage was reconciled until it was fixed or deleted.

  • Backup: a lagMonitor.refreshInterval below 1s is rejected when the backup starts, with a message naming the minimum. A value of 0s previously crashed the backup.

  • Restore: the schema mapping of a restore is now applied to record keys as well. Only the payload was mapped before, so restored keys kept the schema ids of the source registry.

  • Registry backup: subject names are no longer restricted to alphanumerics, dots, dashes, underscores, and slashes. A subject containing any other character, such as a colon, a space, or a dollar sign, aborted the whole backup with “Invalid subject name”.

  • Helm: the umbrella chart now declares Kubernetes 1.30 as its minimum version. This has been the documented and tested floor since 0.15.0, but the chart still allowed installs on older clusters.

  • Added the Backup tuning and Restore tuning guides.

  • Added the How do I clean up old backup data? FAQ entry,

  • Documented changing the retention policy

  • Documented removing a topic’s data

  • Documented the Topic:DescribeConfigs permission in the Kafka required permissions.

  • Restructured the Security page, with OIDC examples for Azure Entra ID, Amazon Cognito, and Keycloak, and the ConfigMap option for custom CA certificates.

  • Corrected the segment rollover timeout description.

  • Corrected a number of reference pages: SASL/OAUTHBEARER is listed as a supported authentication mechanism, the Interrupted backup state and the exact JobCompleted and RestoreCompleted condition reasons are documented, the backup metric types, the schema registry backup image name, the per-chart image pull secrets key, and the OpenShift values example are fixed, and the descriptions of the offset header, schema mapping, work group seed, partition preflight check, and monitoring sidecar match the actual behavior.

  • Added Upgrading to 0.18.x guide.

  • Bump version to 0.18.0.