blob: 0e9ae249d64622aecf65405084421a366ebd05a9 [file] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# Overview
This module provisions a Bitnami Kafka Cluster based on its
[helm chart](https://github.com/bitnami/charts/tree/main/bitnami/kafka).
It uses the [terraform helm provider](https://registry.terraform.io/providers/hashicorp/helm/latest/docs)
Therefore, you DO NOT need helm to apply this module.
# Requirements
- [terraform](https://terraform.io)
- Connection to a kubernetes cluster (See: [.test-infra/terraform/google-cloud-platform/google-kubernetes-engine/google-kubernetes-engine](../../terraform/google-cloud-platform/google-kubernetes-engine) in this repository)
- [kubectl](https://kubernetes.io/docs/reference/kubectl/) cli
# Usage
Simply follow standard terraform workflow to apply this module.
```
terraform init
terraform apply
```
# Special note about GKE Autopilot
When applying this module to
[Google Kubernetes Engine (GKE) Autopilot](https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-overview)
you will see an "Unschedulable" status. This is because, GKE Autopilot
needs time to scale up the node. After some time, the kubernetes cluster
will provision the kafka cluster when these compute resources are available.
# Debugging and Troubleshooting
This module deploys a kafka client on the cluster to help with debugging and
troubleshooting.
## Query the kafka client pod name
Run the following command to query the pod name.
```
kubectl get po -l app=kafka-client
```
You should see something similar to the following:
```
NAME READY STATUS RESTARTS AGE
kafka-client-cdc7c8885-nmcjc 1/1 Running 0 4m12s
```
## Get a shell to the running container
Run the following command to shell into the running container.
```
kubectl exec --stdin --tty kafka-client-cdc7c8885-nmcjc -- /bin/bash
```
## Execute kafka commands
The container executes using the latest [bitnami/kafka](https://hub.docker.com/r/bitnami/kafka/)
image. It has installed all the necessary `kafka-*.sh` scripts in its path.
In all of the commands, you can use the flag: `--bootstrap-server kafka:9092`
because the pod is in the same kubernetes cluster and takes advantage
of its domain name service (DNS). The bitnami helm operator creates a Kubernetes
service called `kafka` that exposes port `9092`.
### Get the cluster-id
The following command gives you the cluster ID and validates you can connect to
the cluster.
```
kafka-cluster.sh cluster-id --bootstrap-server kafka:9092
```
### Create a topic
The following command creates a Kafka topic.
```
kafka-topics.sh --create --topic some-topic --partitions 3 --replication-factor 3 --bootstrap-server kafka:9092
```
### Get information about a topic
The following command queries information about a topic
(assuming the name `some-topic`).
```
kafka-topics.sh --describe --topic some-topic --bootstrap-server kafka:9092
```
See https://kubernetes.io/docs/tasks/debug/debug-application/get-shell-running-container/