You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
4.3 KiB

7 months ago
# 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`файл со следующим содержимым, заменяем его`<ZOOKEEPER-INTERNAL-IP>`на`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: <ZOOKEEPER-INTERNAL-IP>: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
```