base on Apache Kafka® running on Kubernetes [![Strimzi](./documentation/logo/strimzi.png)](https://strimzi.io/) # Run Apache Kafka on Kubernetes and OpenShift [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/strimzi/strimzi-kafka-operator/badge)](https://scorecard.dev/viewer/?uri=github.com/strimzi/strimzi-kafka-operator) [![Build Status](https://github.com/strimzi/strimzi-kafka-operator/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/strimzi/strimzi-kafka-operator/actions/workflows/build.yml?query=branch%3Amain) [![GitHub release](https://img.shields.io/github/release/strimzi/strimzi-kafka-operator.svg)](https://github.com/strimzi/strimzi-kafka-operator/releases/latest) [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0) [![Twitter Follow](https://img.shields.io/twitter/follow/strimziio?style=social)](https://twitter.com/strimziio) [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/strimzi-kafka-operator)](https://artifacthub.io/packages/search?repo=strimzi-kafka-operator) Strimzi provides a way to run an [Apache Kafka®][kafka] cluster on [Kubernetes][k8s] or [OpenShift][os] in various deployment configurations. See our [website][strimzi] for more details about the project. ## Quick Starts To get up and running quickly, check our [Quick Start for Minikube, OKD (OpenShift Origin) and Kubernetes Kind](https://strimzi.io/quickstarts/). ## Documentation Documentation for the current _main_ branch as well as all releases can be found on our [website][strimzi]. ## Roadmap The roadmap of the Strimzi Operator project is maintained as [GitHub Project](https://github.com/orgs/strimzi/projects/4). ## Getting help If you encounter any issues while using Strimzi, you can get help using: - [#strimzi channel on CNCF Slack](https://slack.cncf.io/) - [Strimzi Users mailing list](https://lists.cncf.io/g/cncf-strimzi-users/topics) - [GitHub Discussions](https://github.com/strimzi/strimzi-kafka-operator/discussions) ## Strimzi Community Meetings You can join our regular community meetings: * Thursday 9:00 AM UTC (every 4 weeks) - [convert to your timezone](https://www.thetimezoneconverter.com/?t=8%3A00&tz=UTC) * Thursday 4:00 PM UTC (every 4 weeks, offset by 2 weeks from above meeting) - [convert to your timezone](https://www.thetimezoneconverter.com/?t=16%3A00&tz=UTC) Resources: * [Meeting minutes, agenda and Zoom link](https://docs.google.com/document/d/1V1lMeMwn6d2x1LKxyydhjo2c_IFANveelLD880A6bYc/edit#heading=h.vgkvn1hr5uor) * [Recordings](https://youtube.com/playlist?list=PLpI4X8PMthYfONZopcRd4X_stq1C14Rtn) * [Calendar](https://calendar.google.com/calendar/embed?src=c_m9pusj5ce1b4hr8c92hsq50i00%40group.calendar.google.com) ([Subscribe to the calendar](https://calendar.google.com/calendar/u/0?cid=Y19tOXB1c2o1Y2UxYjRocjhjOTJoc3E1MGkwMEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t)) ## Contributing You can contribute by: - Raising issues you find while using Strimzi - Fixing issues by opening Pull Requests - Improving Strimzi documentation - Talking about Strimzi All bugs, tasks or enhancements are tracked as [GitHub issues](https://github.com/strimzi/strimzi-kafka-operator/issues). Issues which might be a good start for new contributors are marked with ["good-start"](https://github.com/strimzi/strimzi-kafka-operator/labels/good-start) label. The [Dev guide](https://github.com/strimzi/strimzi-kafka-operator/blob/main/development-docs/DEV_GUIDE.md) describes how to build Strimzi. Before submitting a patch, please make sure to understand, how to test your changes before opening a PR [Test guide](https://github.com/strimzi/strimzi-kafka-operator/blob/main/development-docs/TESTING.md). The [Documentation Contributor Guide](https://strimzi.io/contributing/guide/) describes how to contribute to Strimzi documentation. If you want to get in touch with us first before contributing, you can use: - [#strimzi channel on CNCF Slack](https://slack.cncf.io/) - [Strimzi Dev mailing list](https://lists.cncf.io/g/cncf-strimzi-dev/topics) ## License Strimzi is licensed under the [Apache License](./LICENSE), Version 2.0 ## Community Testing ### Linux on IBM Z (s390x) [![Jenkins](https://ibmz-ci.osuosl.org/job/Strimzi_Kafka_Operator_IBMZ_CI/badge/icon)](https://ibmz-ci.osuosl.org/job/Strimzi_Kafka_Operator_IBMZ_CI/) _Note: This badge represents a community-led initiative and is not officially endorsed by the Strimzi project maintainers._ ## Container signatures From the 0.38.0 release, Strimzi containers are signed using the [`cosign` tool](https://github.com/sigstore/cosign). Strimzi uses keyless signing since 0.49.0 release. To verify the container, you can run the following command: ```shell cosign verify --certificate-identity-regexp='https://github.com/strimzi/.*' \ --certificate-oidc-issuer='https://token.actions.githubusercontent.com' \ quay.io/strimzi/operator:latest ``` In case you want to verify containers of older version of Strimzi than 0.49.0, then use our public key: ``` -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAET3OleLR7h0JqatY2KkECXhA9ZAkC TRnbE23Wb5AzJPnpevvQ1QUEQQ5h/I4GobB7/jkGfqYkt6Ct5WOU2cc6HQ== -----END PUBLIC KEY----- ``` And use it to verify the signature: ```shell cosign verify --key strimzi.pub quay.io/strimzi/operator:latest --insecure-ignore-tlog=true ``` ## Software Bill of Materials (SBOM) From the 0.38.0 release, Strimzi publishes the software bill of materials (SBOM) of our containers. The SBOMs are published as an archive with `SPDX-JSON` and `Syft-Table` formats signed using cosign. For releases, they are also pushed into the container registry. Strimzi uses keyless signing since 0.49.0 release. To verify the SBOM signatures, you can run the following command: ```shell cosign verify-blob --bundle <SBOM-file>.bundle \ --certificate-identity-regexp='https://github.com/strimzi/.*' \ --certificate-oidc-issuer='https://token.actions.githubusercontent.com' \ <SBOM-file> ``` In case you want to verify SBOM signatures of older version of Strimzi than 0.49.0, then use our public key: ``` -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAET3OleLR7h0JqatY2KkECXhA9ZAkC TRnbE23Wb5AzJPnpevvQ1QUEQQ5h/I4GobB7/jkGfqYkt6Ct5WOU2cc6HQ== -----END PUBLIC KEY----- ``` You can use it to verify the signature of the SBOM files with the following command: ```shell cosign verify-blob --key cosign.pub --bundle <SBOM-file>.bundle --insecure-ignore-tlog=true <SBOM-file> ``` --- Strimzi is a <a href="http://cncf.io">Cloud Native Computing Foundation</a> incubating project. ![CNCF ><](./documentation/logo/cncf-color.png) [strimzi]: https://strimzi.io "Strimzi" [kafka]: https://kafka.apache.org "Apache Kafka" [k8s]: https://kubernetes.io/ "Kubernetes" [os]: https://www.openshift.com/ "OpenShift" ", Assign "at most 3 tags" to the expected json: {"id":"1412","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"