编程 Go工业物联网实时数据监控平台:Kafka+WebSocket+Go协程,1000+设备毫秒级可视化

2026-06-23 09:19:44 +0800 CST views 8

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+ 设备并发模拟和监控
消息处理 TPS10,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_totalWebSocket 广播消息总数
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 文档

相关链接


Keywords: Go, 工业IoT, Kafka, WebSocket, 实时监控, ECharts, Prometheus, Grafana, Docker, Kubernetes, 传感器, 数据聚合, Go协程, 企业级

推荐文章

从Go开发者的视角看Rust
2024-11-18 11:49:49 +0800 CST
php获取当前域名
2024-11-18 00:12:48 +0800 CST
PHP openssl 生成公私钥匙
2024-11-17 05:00:37 +0800 CST
Vue 中如何处理跨组件通信?
2024-11-17 15:59:54 +0800 CST
程序员茄子在线接单