Pulsar-SQL 是一个非常有用的功能,只是我们使用过程中确实发现了一些问题,大部分都已经修复了;希望对后续使用该功能的朋友有所帮助 。
文章插图
背景为了让业务团队可以更好的跟踪自己消息的生产和消费状态,需要一个类似于表格视图的消息列表,用户可以直观的看到发送的消息;同时点击详情后也能查到消息的整个轨迹 。
消息列表
文章插图
点击详情后查看轨迹
文章插图
文章插图
原理介绍由于 Pulsar 并没有关系型数据库中表的概念,所有的数据都是存储在 Bookkeeper 中,为了模拟使用 SQL 查询的效果 Pulsar 提供了 Presto (现在已经更名为 Trino)的插件 。
Trino 是一个分布式的 SQL 查询引擎,它也提供了插件能力,如果我们想通过 SQL 从自定义数据源查询数据时,基于它的 SPI 编写一个插件是很方便的 。这样便可以类似于查询数据库一样查询 Pulsar 数据:
文章插图
文章插图
Pulsar 插件的运行流程如上图所示:
- 启动的时候通过 Pulsar-Admin 接口获取一些元数据,比如 Scheme,topic 分区信息等 。
- 然后会创建一个只读的 Bookkeeper 客户端,用于获取数据 。
- 之后根据 SQL 条件过滤数据即可 。
文章插图
文章插图
使用 Pulsar-SQL
文章插图
使用起来也很简单,官方提供了两个命令:
- sql-worker: 会启动一个 trino 服务端同时运行了 Pulsar 插件.
- sql: 就是一个 SQL 命令行终端 。
无法使用现有 Trino 集群首先第一个问题是如果生产环境已经有了一个 Trino 集群想要复用的时候就会碰到问题,常规流程是将 Pulsar 的插件复制到 Trino 的 Plugin 目录,然后重启 Trino 后就能使用该插件 。
当然社区也是支持这么做的:
文章插图
但是当我将 Pulsar-plugin 复制到 Trino 中运行的时候却失败了,整体的流程可以参考这个 issue:https://Github.com/Apache/pulsar/discussions/20941
简单来说 Trino 的官方镜像和 pulsar-plugin 并不能兼容,这个问题直接影响到我们是否可以在生产环境使用它 。
但是手动编译出来的 Trino 服务和插件是兼容的,可以直接运行 。
文章插图
因此我只能在本地编译出 Trino 服务端和 pulsar-plugin 然后打包成一个镜像来运行了,当然这样的坏处就是无法利用到我们现有的 Trino 集群,又得重新部署一个了 。
文章插图
流程也比较麻烦:
- 首先是本地编译 Pulsar-SQL 模块
- 将生成物复制到当前目录
- 执行 make Docker 打出 docker 镜像并上传到私服
- 再执行 kubectl 将 trino 部署到 k8s 环境中
【使用 SQL 的方式查询消息队列数据以及踩坑指南】
推荐阅读
- 挖掘Kubernetes 弹性伸缩:利用 KEDA实现基于事件驱动的自动缩放器
- 构建高效的Java网络应用,体验秒级响应
- 详解 canal 同步 MySQL 增量数据到 ES
- 你是否知道如何使用Python Matplotlib创建令人惊叹的数据可视化?
- Golang 中的 IO 包详解:常用的可导出函数详解
- 空间计算指的是什么呢
- 深度解密大模型的“军火商”,向量数据库的八大技术方向!
- 如何分辨是否为 AI 图片?谷歌最新大模型工具将“水印”打入 AI 绘画的 DNA
- 云服务器是干什么的?它和传统服务器有什么区别?
- 人工智能的“胡言乱语”,有没有解法?