feat: замена Kafka → shared-SQS в IoT pipeline

- mqtt-bridge: kafka.Writer → SQS SendMessage (AWS SDK Go v2)
- kafka-consumer → sqs-consumer: polling loop с ReceiveMessage/DeleteMessage
- admin stats: Kafka lag → SQS GetQueueAttributes
- Удалён kafka-consumer, добавлен sqs-consumer
- go.mod: убран segmentio/kafka-go, добавлен aws-sdk-go-v2
- Dockerfile, Makefile: kafka-consumer → sqs-consumer
- .gitignore: исправлен чтобы не игнорировать cmd/ директории
- deployments: новый iot-sqs-consumer.yaml, обновлён mqtt-bridge
- doc/decisions: задокументировано решение
This commit is contained in:
Naeel
2026-04-12 15:28:45 +03:00
parent a5e52c9e1c
commit 6caab6b729
13 changed files with 848 additions and 125 deletions
+6 -5
View File
@@ -1,6 +1,7 @@
# Создано: 2026-04-12
# Изменено: 2026-04-12 (kafka-consumer → sqs-consumer)
# Dockerfile для IoT managed service.
# Multi-stage build: 3 бинарника (iot-operator, mqtt-bridge, kafka-consumer).
# Multi-stage build: 3 бинарника (iot-operator, mqtt-bridge, sqs-consumer).
# Образ: naeel/iot-operator (Docker Hub).
FROM golang:1.25 AS builder
@@ -19,11 +20,11 @@ COPY internal/ internal/
# iot-operator — controller-manager + REST API
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o iot-operator ./cmd/iot-operator/
# mqtt-bridge — MQTT (EMQX) → Kafka
# mqtt-bridge — MQTT (EMQX) → shared-SQS
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o mqtt-bridge ./cmd/mqtt-bridge/
# kafka-consumer — Kafka → Postgres
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o kafka-consumer ./cmd/kafka-consumer/
# sqs-consumer — shared-SQS → Postgres
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o sqs-consumer ./cmd/sqs-consumer/
# --- Runtime ---
FROM gcr.io/distroless/static:nonroot
@@ -33,7 +34,7 @@ WORKDIR /
# Какой запускать — определяется command в k8s Deployment.
COPY --from=builder /workspace/iot-operator .
COPY --from=builder /workspace/mqtt-bridge .
COPY --from=builder /workspace/kafka-consumer .
COPY --from=builder /workspace/sqs-consumer .
USER 65532:65532
ENTRYPOINT ["/iot-operator"]