Go 工业物联网实时数据监控平台:Kafka + WebSocket + Go 协程,1000+ 设备毫秒级可视化
标签: Go / 工业IoT / Kafka / WebSocket / 实时监控 / ECharts / Prometheus / Grafana / Docker / Kubernetes
原文: 微信公众号「码农先森」https://mp.weixin.qq.com/s/y1uyDaEs_8BHcj6o4O3GSg
GitHub: https://github.com/samxie52/simplied-iot-monitoring-go
一句话定位
simplied-iot-monitoring-go 是一个基于 Go 的企业级工业物联网实时数据监控系统。三层架构:Kafka 生产者模拟设备数据 → 消费者实时处理聚合 → WebSocket 推送前端 ECharts 可视化。支持 1000+ 设备并发监控,数据延迟 <100ms,自带 Prometheus + Grafana 监控,完整 Docker/K8s 部署方案。
系统架构
三层核心架构
┌─────────────────────────────────────────────────┐
│ Kafka Producer (Go 协程) │
│ 设备数据模拟器:温度/湿度/压力/电流/开关 5 类传感器 │
│ 支持 100/300/500/1000/2000/5000 台设备 │
└──────────────────┬──────────────────────────────┘
│ Kafka 消息队列
┌──────────────────▼──────────────────────────────┐
│ Kafka Consumer (Go 协程并发处理) │
│ 30秒时间窗口数据聚合 → 实时告警检测 → 数据持久化 │
└──────────────────┬──────────────────────────────┘
│ 聚合数据 + 告警
┌──────────────────▼──────────────────────────────┐
│ Web Service (Gorilla WebSocket) │
│ 毫秒级实时推送 → ECharts 可视化仪表板 │
│ 支持 1000+ 并发 WebSocket 连接 │
└─────────────────────────────────────────────────┘
完整技术栈
后端技术:
- Go 1.19+ — 高性能并发处理和协程管理
- Apache Kafka — 分布式消息队列,高吞吐量数据流
- Gorilla WebSocket — 高性能 WebSocket 实时通信
- Sarama — Kafka Go 客户端(生产者和消费者)
- Prometheus — 指标收集和监控
- PostgreSQL — 数据持久化存储
- Redis — 高性能缓存
前端技术:
- 原生 JavaScript (ES6+) — 轻量级高性能实现
- ECharts 5.4.3 — 专业级实时数据可视化
- 原生 WebSocket API — 实时数据接收
- 响应式 CSS — 适配桌面端和移动端
运维技术:
- Docker + Docker Compose — 容器化部署
- Kubernetes — K8s 集群部署(完整配置)
- Grafana — 监控仪表板
核心能力
1. Kafka 生产者服务
| 能力 | 详情 |
|---|---|
| 设备规模 | 支持 100/300/500/1000/2000/5000 台设备同时模拟 |
| 发送间隔 | 支持 3/5/10 秒可配置 |
| 传感器类型 | 温度、湿度、压力、开关状态、电流,共 5 类 |
| 数据模拟 | 基于正态分布和趋势变化的真实数据生成算法 |
| 发送优化 | 批量消息发送 + 零拷贝优化 |
设备数据结构:
{
"device_id": "device_001",
"device_type": "temperature_sensor",
"timestamp": "2024-01-30T10:30:00Z",
"value": 25.6,
"unit": "°C",
"location": {
"building": "A栋",
"floor": 3,
"room": "301"
},
"status": "online",
"metadata": {
"model": "IOT-TEMP-V2",
"firmware": "1.2.3",
"battery_level": 85
}
}
2. Kafka 消费者服务
| 能力 | 详情 |
|---|---|
| 并发处理 | Go 协程并发,支持高吞吐量数据流 |
| 数据聚合 | 30秒时间窗口聚合:平均值、最大值、最小值 |
| 告警检测 | 基于阈值的实时告警检测和通知 |
| 数据验证 | 完整的数据验证和格式转换 |
| 持久化 | 支持 PostgreSQL 和 Redis 数据存储 |
聚合数据结构:
{
"timestamp": "2024-01-30T10:30:00Z",
"window_seconds": 30,
"device_type": "temperature_sensor",
"aggregated_data": {
"count": 150,
"avg_value": 25.3,
"max_value": 28.1,
"min_value": 22.5,
"online_devices": 145,
"offline_devices": 5
},
"alerts": [
{
"device_id": "device_042",
"alert_type": "temperature_high",
"severity": "warning",
"message": "温度超过阈值: 28.1°C > 28°C",
"current_value": 28.1,
"threshold": 28.0
}
]
}
3. Web 服务(包含 WebSocket)
| 能力 | 详情 |
|---|---|
| 并发连接 | 支持 1000+ 并发 WebSocket 连接 |
| 推送延迟 | 毫秒级数据推送,平均延迟 <100ms |
| 重连机制 | 客户端断线自动重连和状态恢复 |
| 连接监控 | 实时连接数量和状态统计 |
| 消息路由 | 支持基于设备类型的消息过滤 |
4. ECharts 实时可视化
- 聚合数据统计图:实时折线图显示温度/湿度/压力聚合数据(30秒窗口均值/最大/最小)
- 设备状态分布图:环形饼图显示在线/离线设备分布
- 响应式设计:适配桌面端、平板端、移动端
- 交互操作:设备类型筛选、时间范围选择、数据缩放
项目目录结构
simplied-iot-monitoring-go/
├── cmd/ # 三个核心服务入口
│ ├── producer/ # Kafka 生产者服务
│ ├── consumer/ # Kafka 消费者服务
│ ├── web/ # Web 服务(含 WebSocket)
│ └── websocket/ # 独立 WebSocket 服务(备用)
├── internal/ # 内部业务逻辑
│ ├── config/ # YAML 配置管理
│ ├── models/ # 设备数据模型 + Kafka 消息模型
│ ├── producer/ # 设备数据模拟器 + Kafka 生产者
│ ├── services/
│ │ ├── consumer/ # 消费者:聚合引擎 + 告警引擎
│ │ ├── producer/ # 设备数据生成器
│ │ └── websocket/ # Hub + Client + Handler
│ └── utils/ # 日志工具
├── web/ # 前端资源
│ ├── static/css/ # 仪表板样式
│ ├── static/js/ # dashboard.js + websocket-client.js + chart-utils.js
│ └── templates/index.html # 实时监控仪表板
├── configs/ # YAML 配置文件(producer/consumer/web/websocket)
├── scripts/ # 部署和工具脚本
├── deployments/docker/ # Docker 中间件配置
├── monitoring/ # Prometheus + Grafana + 告警规则
├── tests/ # 单元测试 + 集成测试 + 性能测试
├── docs/ # 步骤文档 + API + 部署文档
├── k8s/ # Kubernetes 部署配置(producer/consumer/web)
├── docker-compose.yml # 中间件服务编排
├── Makefile # 构建和任务自动化
└── QUICK_START.md # 快速部署指南
快速上手
环境要求
- Go 1.19+
- Docker & Docker Compose
- Apache Kafka 3.0+
- PostgreSQL 13+
- Redis 6+
一键启动
# 克隆项目
git clone <repository-url>
cd simplied-iot-monitoring-go
# 启动中间件(Kafka, Redis, PostgreSQL, Prometheus)
docker-compose up -d
# 更新配置文件
cp .env.example .env
# 编辑 configs/*.yaml 中的 <MIDDLEWARE_HOST> 为实际 IP
# 构建三个核心服务
make build
# 启动服务(不同终端)
./bin/producer # 生产者:1000台设备,5秒间隔
./bin/consumer # 消费者
./bin/web # Web 服务
# 访问
# 实时监控仪表板: http://localhost:8080
# Prometheus: http://localhost:9090
# Grafana: http://localhost:3000 (admin/admin)
WebSocket 前端接入
// 连接 WebSocket
const ws = new WebSocket('ws://localhost:8080/ws');
// 监听聚合数据
ws.onmessage = function(event) {
const data = JSON.parse(event.data);
if (data.type === 'aggregated_data') {
updateAggregatedCharts(data.data);
updateDeviceStatus(data.device_status);
}
if (data.type === 'alert') {
showAlert(data.alerts);
}
};
// 连接成功后自动接收数据,无需手动订阅
ws.onopen = function() {
console.log('WebSocket 连接已建立');
};
// 可选:发送过滤条件
ws.send(JSON.stringify({
type: 'filter',
device_types: ['temperature_sensor', 'humidity_sensor']
}));
性能指标
| 指标 | 性能 |
|---|---|
| 设备容量 | 1000+ 设备并发模拟和监控 |
| 消息处理 TPS | 10,000+ |
| WebSocket 并发 | 1000+ 并发连接 |
| 实时性 | 数据延迟 <100ms |
| 内存占用 | 生产者 ~50MB,消费者 ~100MB,Web ~80MB |
| CPU 使用率 | 正常负载下 <20% |
Prometheus 监控指标
| 指标 | 说明 |
|---|---|
iot_producer_messages_sent_total | 生产者发送消息总数 |
iot_consumer_messages_processed_total | 消费者处理消息总数 |
iot_websocket_connections_active | 当前 WebSocket 连接数 |
iot_websocket_messages_broadcast_total | WebSocket 广播消息总数 |
iot_devices_online_total | 在线设备数量 |
iot_aggregation_window_processed_total | 已处理聚合窗口数 |
iot_alerts_generated_total | 生成告警总数 |
go_memstats_alloc_bytes | 内存使用量 |
go_goroutines | 协程数量 |
配置文件示例
Producer (configs/producer.yaml):
kafka:
brokers: ["<KAFKA_HOST>:9092"]
topic: "device-data"
batch_size: 100
device_simulator:
device_count: 1000
send_interval: "5s"
device_types:
- "temperature_sensor"
- "humidity_sensor"
- "pressure_sensor"
- "current_sensor"
- "switch_sensor"
Consumer (configs/consumer.yaml):
kafka:
brokers: ["<KAFKA_HOST>:9092"]
topics: ["device-data", "alerts"]
group_id: "iot-consumer-group"
aggregation:
window_seconds: 30
alerts:
temperature_high: 28.0
humidity_high: 80.0
pressure_high: 1050.0
Web (configs/web.yaml):
server:
port: 8080
static_dir: "./web/static"
template_dir: "./web/templates"
websocket:
path: "/ws"
max_connections: 1000
ping_interval: "30s"
Docker 容器化
# 构建所有服务镜像(Go 1.24.4 + Alpine)
make docker-build-all
# 启动完整 IoT 监控系统
docker-compose -f docker-compose.test.yml up -d
# 访问
# Web 监控界面: http://localhost:8083
# WebSocket: ws://localhost:8082/ws
# 生产者指标: http://localhost:8080/metrics
# 消费者指标: http://localhost:8081/metrics
未来计划
- Kubernetes 集群部署
- 多租户支持
- 机器学习异常检测集成
- 移动端应用
- 高级数据分析功能
总结
这是一个完整的企业级工业 IoT 解决方案,展示了现代化 Go 微服务架构设计和最佳实践。
- 🏭 工业场景:支持 1000+ 设备实时监控,温度/湿度/压力/电流/开关 5 类传感器
- ⚡ 高性能:Kafka + Go 协程,消息处理 TPS 10,000+,延迟 <100ms
- 📊 实时可视化:ECharts 仪表板,30秒窗口聚合数据,毫秒级图表更新
- 🔗 WebSocket 推送:Gorilla WebSocket,1000+ 并发连接,自动重连
- 📈 企业级监控:Prometheus 指标 + Grafana 仪表板,完整健康检查
- 🚀 部署完备:Docker 一键部署 + K8s 集群配置
- 📝 文档完善:快速部署指南 + 详细步骤文档 + API 文档
相关链接
- GitHub: https://github.com/samxie52/simplied-iot-monitoring-go
- 原文: https://mp.weixin.qq.com/s/y1uyDaEs_8BHcj6o4O3GSg
Keywords: Go, 工业IoT, Kafka, WebSocket, 实时监控, ECharts, Prometheus, Grafana, Docker, Kubernetes, 传感器, 数据聚合, Go协程, 企业级