<返回更多

使用 SQL 的方式查询消息队列数据以及踩坑指南

2023-08-31  今日头条  crossoverJie
加入收藏
Pulsar-SQL 是一个非常有用的功能,只是我们使用过程中确实发现了一些问题,大部分都已经修复了;希望对后续使用该功能的朋友有所帮助。

背景

为了让业务团队可以更好的跟踪自己消息的生产和消费状态,需要一个类似于表格视图的消息列表,用户可以直观的看到发送的消息;同时点击详情后也能查到消息的整个轨迹。

消息列表

点击详情后查看轨迹

原理介绍

由于 Pulsar 并没有关系型数据库中表的概念,所有的数据都是存储在 Bookkeeper 中,为了模拟使用 SQL 查询的效果 Pulsar 提供了 Presto (现在已经更名为 Trino)的插件。

Trino 是一个分布式的 SQL 查询引擎,它也提供了插件能力,如果我们想通过 SQL 从自定义数据源查询数据时,基于它的 SPI 编写一个插件是很方便的。

这样便可以类似于查询数据库一样查询 Pulsar 数据:

Pulsar 插件的运行流程如上图所示:

相关代码:

使用 Pulsar-SQL

使用起来也很简单,官方提供了两个命令:

遇到的问题

自己在本地运行的时候自然是没问题,可是一旦想在生产运行,同时如果你的 Pulsar 集群是运行再 k8s 环境中时就会碰到一些问题。

无法使用现有 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 集群,又得重新部署一个了。

流程也比较麻烦:

整个流程做下来加上和社区的沟通,更加确定这个功能应该是很少有人在生产环境使用的,毕竟第一个坑就很麻烦,更别提后续的问题了

关键词:SQL      点击(22)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多SQL相关>>>