开源的现代数据探索和可视化平台:Apache Superset 通过 Celery 实现异步查询 Async Queries via Celery
文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。
Apache Superset™ 是一个开源的现代数据探索和可视化平台。对于许多团队来说,Superset 可以取代或增强专有的商业智能工具。Superset 可以与各种数据源很好地集成。
通过 Celery 实现异步查询
Async Queries via Celery
Celery
在大型分析型数据库中,运行数分钟甚至数小时的查询十分常见。为了支持超出典型 Web 请求超时(30-60 秒)的长查询,必须为 Superset 配置异步后端,其组成包括:
- 一个或多个 Superset worker(以 Celery worker 实现),可通过
celery worker
命令启动,运行celery worker --help
查看相关选项。 - 一个 celery broker(消息队列),推荐使用 Redis 或 RabbitMQ。
- 一个结果后端,用于定义 worker 将查询结果持久化的位置。
配置 Celery 需要在 superset_config.py
中定义 CELERY_CONFIG
。worker 和 Web 服务器进程应使用相同配置。
class CeleryConfig(object): broker_url = \"redis://localhost:6379/0\" imports = ( \"superset.sql_lab\", \"superset.tasks.scheduler\", ) result_backend = \"redis://localhost:6379/0\" worker_prefetch_multiplier = 10 task_acks_late = True task_annotations = { \"sql_lab.get_sql_results\": { \"rate_limit\": \"100/s\", }, }CELERY_CONFIG = CeleryConfig
要启动 Celery worker 以利用上述配置,请运行以下命令:
celery --app=superset.tasks.celery_app:app worker --pool=prefork -O fair -c 4
要启动用于调度周期性后台任务的作业,请运行以下命令:
celery --app=superset.tasks.celery_app:app beat
要设置结果后端,需要将一个派生自 flask_caching.backends.base 中的 BaseCache 的实例传递给 superset_config.py 中的 RESULTS_BACKEND 配置键。你可以使用 Memcached、Redis、S3(https://pypi.python.org/pypi/s3werkzeugcache)、内存或文件系统(单服务器配置或测试),也可以编写自己的缓存接口。你的 superset_config.py
可能如下所示:
# 使用 S3from s3cache.s3cache import S3CacheS3_CACHE_BUCKET = \'foobar-superset\'S3_CACHE_KEY_PREFIX = \'sql_lab_result\'RESULTS_BACKEND = S3Cache(S3_CACHE_BUCKET, S3_CACHE_KEY_PREFIX)# 使用 Redisfrom flask_caching.backends.rediscache import RedisCacheRESULTS_BACKEND = RedisCache( host=\'localhost\', port=6379, key_prefix=\'superset_results\')
为了提升性能,现已使用 MessagePack 和 PyArrow 进行结果序列化。如出现问题,可通过在 superset_config.py
中设置 RESULTS_BACKEND_USE_MSGPACK = False
来禁用。升级现有环境时,请清空已有结果缓存。
重要说明
-
Superset 集群中的所有 worker 节点和 Web 服务器必须共享同一元数据库。这意味着 SQLite 在此场景下不适用,因为它对并发支持有限且通常位于本地文件系统。
-
整个环境只能运行一个 celery beat 实例。否则,后台任务可能被多次调度,导致异常行为,如报告重复投递、负载/流量高于预期等。
-
仅在数据库设置中启用异步查询执行(Sources > Databases > Edit record),SQL Lab 才会以异步方式运行查询。
Celery Flower
Flower 是一个基于 Web 的 Celery 集群监控工具,可通过 pip 安装:
pip install flower
可通过以下命令运行 flower:
celery --app=superset.tasks.celery_app:app flower
风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。