第 14 章 · 进阶组件:时序 / OLAP / IoT / 安全 / 自动化
本章覆盖商店中 高频但非基础栈 的组件:时序库、分析库、分布式 SQL、MQTT、SSO、密钥管理、工作流等。均按第 1 章七节模板展开。
14.1 组件速览
| 组件 | id | 端口 | 典型场景 |
|---|---|---|---|
| InfluxDB | influxdb | 8086 | IoT 指标、自定义时序 |
| ClickHouse | clickhouse | 8123 | 报表 OLAP、日志分析 |
| TiDB | tidb | 4000 | 分布式 MySQL 协议 |
| EMQX | emqx | 1883 | MQTT 设备接入 |
| Keycloak | keycloak | 8080 | SSO / OIDC |
| Vault | vault | 8200 | 密钥托管 |
| n8n | n8n | 5678 | 低代码自动化 |
| ZooKeeper | zookeeper | 2181 | Kafka 协调(旧版) |
| ActiveMQ | activemq | 8161 | JMS 企业集成 |
14.2 InfluxDB 2.7(时序数据库)
适用场景
设备遥测、应用自定义 metrics 长期存储、与 Grafana 集成(Flux 查询)。
商店部署参数
| 项 | 值 |
|---|---|
| id | influxdb |
| 镜像 | influxdb:2.7 |
| 端口 | 8086 |
| PVC | 10 Gi → /var/lib/influxdb2 |
环境变量(初始化)
env:
- name: DOCKER_INFLUXDB_INIT_MODE
value: setup
- name: DOCKER_INFLUXDB_INIT_USERNAME
value: admin
- name: DOCKER_INFLUXDB_INIT_PASSWORD
value: InfluxPass123
- name: DOCKER_INFLUXDB_INIT_ORG
value: shop
- name: DOCKER_INFLUXDB_INIT_BUCKET
value: metrics
- name: DOCKER_INFLUXDB_INIT_ADMIN_TOKEN
value: my-super-secret-token
连接语法
| 方式 | 值 |
|---|---|
| HTTP API | http://influxdb.data.svc.cluster.local:8086 |
| Token | 初始化时 DOCKER_INFLUXDB_INIT_ADMIN_TOKEN |
写入(CLI)
influx write -b metrics -o shop -t my-super-secret-token \
'temperature,device=sensor1 value=23.5'
Flux 查询
from(bucket: "metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "temperature")
Python
from influxdb_client import InfluxDBClient
client = InfluxDBClient(url="http://influxdb.data:8086", token="...", org="shop")
write_api = client.write_api()
write_api.write(bucket="metrics", record={"measurement": "orders", "fields": {"count": 1}})
14.3 ClickHouse 24.3(OLAP)
适用场景
亿级日志/订单分析、实时报表、大宽表聚合;不适合 OLTP 高频单行更新。
商店部署参数
| 项 | 值 |
|---|---|
| id | clickhouse |
| 镜像 | clickhouse/clickhouse-server:24.3 |
| 端口 | 8123(HTTP);9000(Native,需在端口弹窗补充) |
| PVC | 50 Gi → /var/lib/clickhouse |
环境变量
env:
- name: CLICKHOUSE_USER
value: default
- name: CLICKHOUSE_PASSWORD
value: ChPass123
- name: CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT
value: "1"
SQL 语法
CREATE TABLE orders_analytics (
order_date Date,
product_id UInt64,
amount Decimal(18,2)
) ENGINE = MergeTree()
ORDER BY (order_date, product_id);
INSERT INTO orders_analytics VALUES ('2026-08-18', 1001, 99.00);
SELECT product_id, sum(amount) AS revenue
FROM orders_analytics
WHERE order_date >= today() - 7
GROUP BY product_id
ORDER BY revenue DESC
LIMIT 10;
HTTP
curl "http://clickhouse.data:8123/?query=SELECT%201"
JDBC:jdbc:clickhouse://clickhouse.data:8123/default
14.4 TiDB 8.1(分布式 NewSQL)
适用场景
MySQL 协议兼容 + 水平扩展;订单/账户大表分片;HTAP(配合 TiFlash 需完整集群)。
商店部署参数
| 项 | 值 |
|---|---|
| id | tidb |
| 镜像 | pingcap/tidb:v8.1.0 |
| 端口 | 4000(MySQL 协议);10080(Status) |
| PVC | 50 Gi → /data |
商店为 单容器 TiDB 演示。生产完整集群需 PD、TiKV、TiDB 多角色,请按 PingCAP 官方架构部署。
连接语法
mysql://root@tidb.data.svc.cluster.local:4000/test
mysql -h tidb.data -P 4000 -u root -e "SELECT VERSION();"
Spring Boot(与 MySQL 相同驱动)
spring:
datasource:
url: jdbc:mysql://tidb.data.svc.cluster.local:4000/shop?useSSL=false
username: root
14.5 EMQX 5.8(MQTT)
适用场景
物联网设备上下行、车联网、智能家居;百万级 MQTT 连接(需调资源与集群)。
商店部署参数
| 项 | 值 |
|---|---|
| id | emqx |
| 镜像 | emqx/emqx:5.8.0 |
| 端口 | 1883(MQTT);8883(MQTTS);18083(Dashboard) |
环境变量
env:
- name: EMQX_NAME
value: emqx
- name: EMQX_HOST
value: emqx.middleware.svc.cluster.local
- name: EMQX_DASHBOARD__DEFAULT_USERNAME
value: admin
- name: EMQX_DASHBOARD__DEFAULT_PASSWORD
value: EmqxPass123