第3章 连接Doris数据库的四种方式

Apache Doris 采用 MySQL 网络连接协议,兼容 MySQL 生态的命令行工具、JDBC/ODBC 和各种可视化工具。同时 Apache Doris 也内置了一个简单的 Web UI,方便使用。下面分别介绍如何通过 MySQL Client、MySQL JDBC Connector、Navicat 和 Doris 内置的 Web UI 来连接 Doris。

3.1MySQL Client

从 MySQL 官方网站下载 MySQL Client,或者按照地址(https://cdn.selectdb.com/download/mysql-client/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz)下载我们提供的 Linux 上免安装的 MySQL 客户端。当前 Doris 主要兼容 MySQL 5.7 及其以上的客户端。

解压下载的 MySQL 客户端,在 bin/ 目录下可以找到 mysql 命令行工具。然后执行下面的命令连接 Doris。
#通过MySQL客户端链接FE
[root@hadoop1 ~]# mysql -h hadoop1 -uroot -P 9030
在这里插入图片描述

参数解释:hadoop1为FE的监听地址,9030为FE的MySQL协议服务的端口,在 fe.conf 中对应 query_port, 默认为 9030。

<think>我们正在处理用户关于将EMQX 5.3.2中的数据传送到Doris数据库的问题。根据引用内容,用户已经知道如何通过EMQX的规则引擎将数据转发到Web服务,然后需要编写一个Servlet程序来接收数据并存入Doris数据库。因此,我们需要详细说明从EMQX到Doris的整个流程。 步骤分解: 1. 在EMQX中创建规则,通过SQL语句筛选出需要转发的数据。 2. 创建一个Web服务动作,将数据发送到指定的URL(即我们即将编写的Servlet接口)。 3. 编写一个Servlet程序,接收POST请求,解析数据并写入Doris数据库。 由于Doris兼容MySQL协议,我们可以使用JDBC来连接Doris。因此,在Servlet中,我们将使用JDBC连接Doris,并将接收到的数据插入到相应的表中。 详细步骤: 第一步:在EMQX中创建规则 - 登录EMQX Dashboard,进入“规则”页面。 - 创建一条规则,编写SQL语句来筛选需要的数据。例如: SELECT payload.sensor_type as sensor_type, payload.value as value FROM "t/#" -- 根据实际主题调整 - 这里假设payload是JSON格式,包含sensor_type和value字段。 第二步:创建Web服务动作 - 在规则中,添加一个动作,选择“发送数据到Web服务”。 - 创建一个资源,类型为WebHook,URL填写你的Servlet程序的地址(例如:http://your-server:port/emqx-data-receiver)。 - 消息内容模板可以留空(默认使用整个规则结果),或者根据需要自定义。 第三步:编写Servlet程序(以Java Servlet为例) - 创建一个Java Web项目,编写一个Servlet来处理POST请求。 - 在Servlet中,接收JSON格式的数据(假设EMQX发送的是JSON)。 - 解析JSON,获取传感器类型和数值。 - 使用JDBC连接Doris数据库,执行插入操作。 示例Servlet代码片段: ```java import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONObject; import org.json.JSONException; public class EmqxDataReceiver extends HttpServlet { // Doris数据库连接信息 private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://your-doris-host:9030/your_database"; private static final String USER = "your_username"; private static final String PASS = "your_password"; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 读取请求体中的JSON数据 StringBuilder buffer = new StringBuilder(); String line; try { while ((line = request.getReader().readLine()) != null) { buffer.append(line); } JSONObject json = new JSONObject(buffer.toString()); // 解析JSON,这里假设EMQX发送的JSON格式为:{"sensor_type":"温度", "value":25.5} String sensorType = json.getString("sensor_type"); double value = json.getDouble("value"); // 插入到Doris数据库 Class.forName(JDBC_DRIVER); try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS)) { String sql = "INSERT INTO sensor_data (sensor_type, value, create_time) VALUES (?, ?, NOW())"; try (PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, sensorType); stmt.setDouble(2, value); stmt.executeUpdate(); } } response.setStatus(HttpServletResponse.SC_OK); response.getWriter().write("Data received and stored successfully."); } catch (Exception e) { e.printStackTrace(); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); response.getWriter().write("Error processing request: " + e.getMessage()); } } } ``` 注意: - 需要将Doris的JDBC驱动(MySQL Connector/J)添加到项目中。 - 根据实际表结构调整SQL语句。 - 确保网络连通:EMQX服务器能够访问到部署Servlet的服务器,Servlet服务器能够访问Doris数据库。 第四步:部署并启动Servlet程序 - 将Servlet程序部署到Tomcat等Servlet容器中,并启动。 - 测试接口:可以使用Postman发送一个模拟的POST请求(JSON格式)到Servlet的URL,检查是否能够成功插入数据。 第五步:测试整个流程 - 使用MQTT客户端向EMQX发送一条消息,主题匹配规则中设定的主题(例如t/sensor),内容为JSON格式的payload。 - 检查Doris数据库中是否成功插入数据。 安全考虑: - 在实际生产环境中,应考虑接口的安全性(如使用HTTPS、认证等)。 - 对数据库连接进行池化管理(如使用HikariCP)以提高性能。 通过以上步骤,即可实现将EMQX 5.3.2中的数据转发并存储到Doris数据库中。 §§相关问题§§ 1. EMQX规则引擎中SQL语句的编写有哪些注意事项? 2. 如何优化Servlet程序以提高大量数据写入的性能? 3. 除了使用Servlet接收数据,还有哪些方式可以将EMQX数据写入Doris? 4. Doris数据库表结构设计有哪些最佳实践?</think>### 将 EMQX 5.3.2 数据传输到 Doris 数据库的详细步骤 #### **步骤 1:配置 EMQX 规则引擎** 1. **创建规则** - 登录 EMQX Dashboard → 进入 **规则引擎** → 点击 **创建** - 编写 SQL 筛选需要的数据(示例): ```sql SELECT payload.sensor_type AS sensor, payload.value AS value, clientid, timestamp FROM "sensors/#" -- 替换为实际主题 ``` - 点击 **测试** 验证规则是否匹配 MQTT 消息[^1]。 2. **配置数据转发动作** - 在规则中点击 **添加动作** → 选择 **发送数据到 Web 服务** - 创建新的 **资源类型**:`WebHook` - 填写目标 URL(后续编写的接口地址):`http://your-server:port/emqx-to-doris` - 消息模板留空(默认转发完整 JSON 数据)[^1]。 --- #### **步骤 2:编写数据接收接口(示例:Java Servlet)** ```java import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.sql.*; import org.json.JSONObject; public class DorisWriter extends HttpServlet { // Doris 连接配置(兼容 MySQL 协议) private static final String JDBC_URL = "jdbc:mysql://DORIS_HOST:9030/db_name"; private static final String USER = "root"; private static final String PASS = ""; protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { // 1. 解析 EMQX 发送的 JSON BufferedReader reader = req.getReader(); StringBuilder json = new StringBuilder(); String line; while ((line = reader.readLine()) != null) json.append(line); JSONObject data = new JSONObject(json.toString()); String sensor = data.getString("sensor"); double value = data.getDouble("value"); // 2. 写入 Doris 数据库 Class.forName("com.mysql.jdbc.Driver"); try (Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASS)) { String sql = "INSERT INTO sensor_data (sensor_type, value, ts) VALUES (?, ?, NOW())"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, sensor); stmt.setDouble(2, value); stmt.executeUpdate(); // 执行插入 } resp.setStatus(200); resp.getWriter().write("Data saved to Doris"); } catch (Exception e) { resp.setStatus(500); resp.getWriter().write("Error: " + e.getMessage()); } } } ``` --- #### **步骤 3Doris 数据库准备** 1. **创建表**(通过 MySQL 客户端连接 Doris): ```sql CREATE TABLE sensor_data ( id BIGINT AUTO_INCREMENT, sensor_type VARCHAR(50), value DOUBLE, ts DATETIME ) ENGINE=OLAP DUPLICATE KEY(id) DISTRIBUTED BY HASH(id) BUCKETS 10; ``` 2. **验证数据**: ```sql SELECT * FROM sensor_data LIMIT 10; ``` --- #### **步骤 4:部署与测试** 1. **部署 Servlet** - 将编译的 Servlet 部署到 Tomcat/Jetty 等容器 - 确保端口开放(如 `http://your-server:8080/emqx-to-doris`) 2. **测试流程** - 使用 MQTT 客户端向 `sensors/temperature` 发送消息: ```json {"sensor_type": "temp", "value": 25.5} ``` - 检查 Doris 数据表是否更新 - 在 EMQX Dashboard 的 **规则指标** 中查看转发状态[^1]。 --- #### **关键注意事项** 1. **性能优化** - 在 Servlet 中使用数据库连接池(如 HikariCP) - Doris 建议批量写入(可在 EMQX 规则中配置批量大小) 2. **错误处理** - 添加 Servlet 重试机制(如失败时缓存数据到 Redis) - 监控 Doris 写入延迟(通过 `SHOW LOAD` 命令) 3. **安全加固** - 在 WebHook 中启用 HTTPS - Doris 配置 IP 白名单(仅允许 Servlet 服务器访问) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俊哥大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值