# k8s Kafka Template Kafka — ключевое решение для организаций, которые заинтересованы во внедрении событийно-управляемых архитектур и систем реального времени. 00-namespace.yaml ```bash apiVersion: v1 kind: Namespace metadata: name: "kafka" labels: name: "kafka" ``` ```bash kubectl apply -f 00-namespace.yaml ``` 01-zookeeper.yaml ```bash apiVersion: v1 kind: Service metadata: labels: app: zookeeper-service name: zookeeper-service namespace: kafka spec: type: NodePort ports: - name: zookeeper-port port: 2181 nodePort: 30181 targetPort: 2181 selector: app: zookeeper --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: zookeeper name: zookeeper namespace: kafka spec: replicas: 1 selector: matchLabels: app: zookeeper template: metadata: labels: app: zookeeper spec: containers: - image: wurstmeister/zookeeper imagePullPolicy: IfNotPresent name: zookeeper ports: - containerPort: 2181 ``` ```bash kubectl apply -f 01-zookeeper.yaml ``` ```bash kubectl get services -n kafka ``` Мы видим внутренний IP-адрес Zookeeper, который нам понадобится сообщить брокеру, где его прослушивать. Последний шаг — развертывание брокера Kafka. Мы создаем`02-kafka.yaml`файл со следующим содержимым, заменяем его``на`CLUSTER-IP`предыдущий шаг для Zookeeper. Если не выполнить этот шаг, брокер не сможет выполнить развертывание. 02-kafka.yaml ```bash apiVersion: v1 kind: Service metadata: labels: app: kafka-broker name: kafka-service namespace: kafka spec: ports: - port: 9092 selector: app: kafka-broker --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: kafka-broker name: kafka-broker namespace: kafka spec: replicas: 1 selector: matchLabels: app: kafka-broker template: metadata: labels: app: kafka-broker spec: hostname: kafka-broker containers: - env: - name: KAFKA_BROKER_ID value: "1" - name: KAFKA_ZOOKEEPER_CONNECT value: :2181 - name: KAFKA_LISTENERS value: PLAINTEXT://:9092 - name: KAFKA_ADVERTISED_LISTENERS value: PLAINTEXT://kafka-broker:9092 image: wurstmeister/kafka imagePullPolicy: IfNotPresent name: kafka-broker ports: - containerPort: 9092 ``` ```bash kubectl apply -f 02-kafka.yaml ``` Просмотреть запущенные сервисы ```bash kubectl get pods -n kafka ``` (pythonProject) PS J:\MTC-aquarium\k8s> kubectl get pods -n kafka NAME READY STATUS RESTARTS AGE kafka-broker-75d58df49b-tt69x 1/1 Running 0 4m18s zookeeper-74d96f84bd-cnjj2 1/1 Running 0 16m Чтобы проверить, можем ли мы отправлять и получать сообщения из темы в Kafka, нам нужно будет открыть порт для Kafka, чтобы сделать его доступным с локального хоста. Мы запускаем следующую команду, чтобы открыть порт: ```bash kubectl port-forward kafka-broker-75d58df49b-tt69x 9092 -n kafka ``` Эта команда делает порт`9092`этого модуля доступным за пределами кластера Minikube k8s по адресу`localhost:9092`. Чтобы легко отправлять и получать сообщения из Kafka, мы будем использовать инструмент командной строки[KCat](https://github.com/edenhill/kcat)(ранее Kafkacat). Чтобы создать сообщение и тему с именем`test`, мы запускаем следующую команду: ```bash echo "hello world!" | kafkacat -P -b localhost:9092 -t test ```