太方便了!DLA消息回执,及时通知您的异步Query

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 一、DLA介绍 数据湖(Data Lake)是时下热门的概念,更多阅读可以参考:https://en.wikipedia.org/wiki/Data_lake。基于数据湖,可以不用做任何ETL、数据搬迁等过程,实现跨各种异构数据源进行大数据关联分析,从而极大的节省成本和提升用户体验。

一、DLA介绍

数据湖(Data Lake)是时下热门的概念,更多阅读可以参考:https://en.wikipedia.org/wiki/Data_lake。基于数据湖,可以不用做任何ETL、数据搬迁等过程,实现跨各种异构数据源进行大数据关联分析,从而极大的节省成本和提升用户体验。

终于,阿里云现在也有了自己的数据湖分析产品(Data Lake Analytics,后续简称DLA):https://www.aliyun.com/product/datalakeanalytics

产品文档:https://help.aliyun.com/product/70174.html

二、本案背景

因为一般OLAP的场景,SQL通常比较复杂也比较耗时,如果程序一直阻塞等待的话,会影响业务,因此DLA支持异步执行任务。在SQL上加一个Hint即可,相关的查询结果会默认写入到您的OSS目录中(如果OSS未开通则无法使用异步查询,目录是DLA默认规划好的),并且会返回这个Query对应的ID回执给您,这个回执在后续有用:

mysql> /*+ run-async=true */select * from test_table1;
+--------------------------------+
| ASYNC_TASK_ID                  |
+--------------------------------+
| q201811021109sh8d1a0b750000182 |
+--------------------------------+
1 row in set (0.04 sec)

如果您想要查看您的异步SQL任务执行状况,可以执行另一个SQL:

mysql> show query_task where id = 'q201811021109sh8d1a0b750000182'\G
*************************** 1. row ***************************
                  id: q201811021109sh8d1a0b750000182
        mpp_query_id: 20181102_030939_149_svnhw
              status: SUCCESS
           task_name: SELECT
        table_schema: sh_tpch
             command: /*+ run-async=true */select * from test_table1
          creator_id: ${您的dla账号}
         create_time: 2018-11-02 11:09:40.0
         update_time: 2018-11-02 11:09:40.0
       connection_id: 693929276088405
             message: 
           row_count: 2
         elapse_time: 692
  scanned_data_bytes: 147
result_file_oss_file: oss://aliyun-oa-query-results-${您的uid}-oss-cn-shanghai/DLA_Result/2018/11/02/q201811021109sh8d1a0b750000182/result.csv
    cancellable_task: 0
          mq_product: NULL
            mq_topic: NULL
      mq_producer_id: NULL
            mq_model: NULL
           mq_status: NULL
        mq_error_msg: NULL
       mq_message_id: NULL
       mq_total_time: NULL
1 row in set (0.02 sec)

其中status: SUCCESS(RUNNING表示运行中,FAILURE表示已失败,CANCELLED表示用户取消,等等)表示这个Query执行成功,result_file_oss_file: oss://aliyun-oa-query-results-.......就是存储到您的OSSQuery的结果集文件在您的OSS上,elapse_time: 692表示整体Query花费的时间,scanned_data_bytes: 147表示Query扫描的数据量(收费依据),等等信息;

关键问题是,用户程序需要一直轮询执行show query_task,才能知道Query的状态是不是从RUNNING转移到SUCCESS状态,这样对用户的程序影响很大,因此需要有通知机制来及时告知用户程序。

所以,DLA最近支持了消息回执的机制,帮助用户快速、异步感知任务执行状态。目前DLA已经支持将消息写入到阿里云上的__ONS__(https://www.aliyun.com/product/ons)服务,后续还会考虑支持kafka(https://www.aliyun.com/product/kafka)、mns(https://www.aliyun.com/product/mns)、http等接口或服务;

下面,就以我们的测试账号,来介绍下如何在DLA中使用ONS来做消息回执通知。

三、准备工作

a)开通ONS服务,进入控制台

进入https://www.aliyun.com/product/ons 开通服务,然后进入ons的控制台:https://ons.console.aliyun.com/

image.png | left | 827x355

b)选择与DLA相同的Region,创建相关的元信息

1. 在这里,我们选择华东2集群,作为我们的测试集群:

image.png | left | 827x368

2. 创建Topic,专门接收DLA的消息:

image.png | left | 827x375

3. 为DLA创建一个生产者:

image.png | left | 827x351

image.png | left | 827x353

c)为DLA开通角色授权,允许DLA给您的topic发送消息

1. 给DLA云账号授权:

访问连接:https://ram.console.aliyun.com/#/role/authorize?request=%7B%22Requests%22:%20%7B%22request1%22:%20%7B%22RoleName%22:%20%22AliyunOpenAnalyticsAccessingMQRole%22,%20%22TemplateId%22:%20%22MQRole%22%7D%7D,%20%22ReturnUrl%22:%20%22https:%2F%2Fopenanalytics.console.aliyun.com%2F%22,%20%22Service%22:%20%22OpenAnalytics%22%7D

image.png | left | 827x313

2. 在访问控制(https://ram.console.aliyun.com)中,查看自己的角色列表:

image.png | left | 827x461

3. 确认一下,确实是只有PUB权限:

image.png | left | 827x300

四、开始使用:

a)目前消息回执,也是通过在SQL上增加hint的方式来通知:

mysql> /*+ run_async=true, mq-notify-by=ons, mq-topic=dla_shanghai_topic, mq-producer-id=PID_dla_shanghai */ select * from test_table1;
+--------------------------------+
| ASYNC_TASK_ID                  |
+--------------------------------+
| q201811021152sh8d1a0b750000191 |
+--------------------------------+
1 row in set (0.03 sec)

其中mq-notify-by=ons, mq-topic=dla_shanghai_topic, mq-producer-id=PID_dla_shanghai是上面已经配置过的。

b)执行show query_task看下效果:

mysql> show query_task where id = 'q201811021152sh8d1a0b750000191'\G
*************************** 1. row ***************************
                  id: q201811021152sh8d1a0b750000191
        mpp_query_id: 20181102_035233_150_svnhw
              status: SUCCESS
           task_name: SELECT
        table_schema: sh_tpch
             command: /*+ run_async=true, mq-notify-by=ons, mq-topic=dla_shanghai_topic, mq-producer-id=PID_dla_shanghai */ select * from test_table1
          creator_id: ${您的dla账号}
         create_time: 2018-11-02 11:52:34.0
         update_time: 2018-11-02 11:52:35.0
       connection_id: 693929276092181
             message: 
           row_count: 2
         elapse_time: 814
  scanned_data_bytes: 147
result_file_oss_file: oss://aliyun-oa-query-results-${您的uid}-oss-cn-shanghai/DLA_Result/2018/11/02/q201811021152sh8d1a0b750000191/result.csv
    cancellable_task: 0
          mq_product: ons
            mq_topic: dla_shanghai_topic
      mq_producer_id: PID_dla_shanghai
            mq_model: NULL
           mq_status: SUCCESS
        mq_error_msg: NULL
       mq_message_id: AC1314094B444E0E2F2A07B2C1E40000
       mq_total_time: 1834
1 row in set (0.02 sec)

上面的mq_xxx列,都是关于消息通知的信息。其中mq_status: SUCCESS表示消息发送成功,而mq_message_id: AC1314094B444E0E2F2A07B2C1E40000则是这个消息回执的消息id。

c)进入消息查询,查看消息情况:

image.png | left | 827x444

image.png | left | 827x436

d)消息消费:

消息是有3天保质期的,过期了消息就会被清理掉,请及时消费掉。具体的消息消费过程,请查看文档:https://help.aliyun.com/document_detail/29551.html,这里我不再赘述。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
5月前
|
存储 人工智能 搜索推荐
教你10 分钟内为自己网站配置AI助手
阿里云百炼平台支持一键部署大模型镜像,如DeepSeek、千问、Kimi等,通过智能体(Agent)集成RAG、插件、MCP等功能,实现知识库接入与外部工具调用,轻松为网站添加AI助手,构建个性化、可扩展的AI应用。
979 3
|
5月前
|
安全 算法 网络协议
从明文到加密:HTTP与HTTPS核心知识全解析
本文深入解析HTTP与HTTPS的核心差异,揭示HTTPS如何通过SSL/TLS协议、CA证书和混合加密机制,解决HTTP的窃听、篡改与冒充三大安全问题,全面科普网络安全关键技术。
2098 6
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
2146 23
|
算法 测试技术 持续交付
面试的流程,面试的重点
本文介绍了面试流程及各轮面试的重点。通常面试为1-5轮,首轮关注技术实力与项目经验,次轮深入考察技术细节,第三轮侧重项目协调、创新及价值观等软性问题,如职业规划和沟通能力。面试题分为开放型(如项目经验、解决问题思路)和非开放型(如技术细节、手撕算法),需提前准备。测试类问题涉及自动化测试、持续集成等实际应用。
|
存储 弹性计算 Linux
Kibana+云上ES访问SLS的操作文档
本文介绍了如何用Kibana+云上ES访问SLS的方案
783 2
Kibana+云上ES访问SLS的操作文档
|
Linux 文件存储 数据安全/隐私保护
要在文件存储NAS中实现AD域(Active Directory域)的集成,您需要执行以下步骤:
要在文件存储NAS中实现AD域(Active Directory域)的集成,您需要执行以下步骤:
718 7
|
存储 安全 API
oss服务器端加密(SSE)
阿里云OSS提供服务器端加密(SSE),自动加密上传的数据并透明解密下载,保护云端对象的隐私和机密性。SSE支持两种方式:SSE-KMS(使用KMS托管CMK)和SSE-OSS(OSS管理加密密钥)。加密过程在服务器端完成,对用户应用透明且兼容标准HTTP接口。云盒和ossutil工具也支持此功能,让用户轻松管理加密对象,确保数据存储和传输安全。用户可按需选择密钥管理方式。
856 4
|
SQL 关系型数据库 MySQL
在OceanBase数据库中,mysqldump工具是可以用于数据备份的
【2月更文挑战第2天】在OceanBase数据库中,mysqldump工具是可以用于数据备份的
684 6
|
数据采集 存储 缓存
K8S采集专题-稳定性:iLogtail容器重启数据可靠性探讨
容器场景下iLogtail容器的稳定性对于日志采集的可靠性尤为重要,特别是对于容器重启的情况需要通过特定的配置确保采集状态可恢复。本文简要讲解了iLogtail的状态持久化原理和容器场景状态持久化方案,并详细描述了在K8S和Docker环境下如何配置iLogtail参数和容器参数来解决这种情况下的数据采集的稳定性问题。
|
架构师 测试技术 uml
这才是业务用例,别再搞错了!
这才是业务用例,别再搞错了!
2170 0