Kafka - SQL 引擎分享

1.概述

  大多数情况下,我们使用 Kafka 只是作为消息处理。在有些情况下,我们需要多次读取 Kafka 集群中的数据。当然,我们可以通过调用
Kafka 的 API
来完成,但是针对不同的业务需求,我们需要去编写不同的接口,在经过编译,打包,发布等一系列流程。最后才能看到我们预想的结果。那么,我们能不能有一种
简便的方式去实现这一部分功能,通过编写 SQL 的方式,来可视化我们的结果。今天,笔者给大家分享一些心得,通过使用 SQL
的形式来完成这些需求。

2.内容

  实现这些功能,其架构和思路并不复杂。这里笔者将整个实现流程,通过一个原理图来呈现。如下图所示:

  这里笔者给大家详述一下上图的含义,消息数据源存放与 Kafka 集群当中,开启低阶和高阶两个消费线程,将消费的结果以 RPC
的方式共享出去(即:请求者)。数据共享出去后,回流经到 SQL 引擎处,将内存中的数据翻译成 SQL Tree,这里使用到了 Apache 的
Calcite 项目来承担这一部分工作。然后,我们通过 Thrift 协议来响应 Web Console 的 SQL
请求,最后将结果返回给前端,让其以图表的实行可视化。

3.插件配置

  这里,我们需要遵循 Calcite 的 JSON Models,比如,针对 Kafka 集群,我们需要配置一下内容:

{
    version: '1.0',
    defaultSchema: 'kafka',
    schemas: [
        {
            name: 'kafka',
            type: 'custom',
            factory: 'cn.smartloli.kafka.visual.engine.KafkaMemorySchemaFactory',
            operand: {
                database: 'kafka_db'
            }
        }
    ]
}

  另外,这里最好对表也做一个表述,配置内容如下所示:

[
    {
        "table":"Kafka",
        "schemas":{
            "_plat":"varchar",
            "_uid":"varchar",
            "_tm":"varchar",
            "ip":"varchar",
            "country":"varchar",
            "city":"varchar",
            "location":"jsonarray"
        }
    }
]

4.操作

  下面,笔者给大家演示通过 SQL 来操作相关内容。相关截图如下所示:

  在查询处,填写相关 SQL 查询语句。点击 Table 按钮,得到如下所示结果:

  我们,可以将获取的结果以报表的形式进行导出。

  当然,我们可以在 Profile 模块下,浏览查询历史记录和当前正在运行的查询任务。至于其他模块,都属于辅助功能(展示集群信息,Topic 的 Partition 信息等)这里就不多赘述了。

5.总结

  分析下来,整体架构和实现的思路都不算太复杂,也不存在太大的难点,需要注意一些实现上的细节,比如消费 API
针对集群消息参数的调整,特别是低阶消费 API,尤为需要注意,其 fetch_size 的大小,以及 offset 是需要我们自己维护的。在使用
Calcite 作为 SQL 树时,我们要遵循其 JSON Model 和标准的 SQL 语法来操作数据源。

6.结束语

这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

 

时间: 2025-01-01 23:22:57

Kafka - SQL 引擎分享的相关文章

KSQL,用于Apache Kafka的流数据SQL引擎

Apache Kafka是一个分布式的.分区的.多复本的日志提交服务,使用Scala编写,以可水平扩展和高吞吐率而被广泛使用.Kafka最初是由LinkedIn开发,并于2011年初开源,目标是为实时数据处理提供一个统一.高通量.低等待的平台.目前,越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spark都支持与Kafka集成. Kafka拓扑结构 Kafka的设计可以帮助用户解决很多架构上的问题,其具备的高性能.低耦合.高可靠性.数据不丢失等特性,结合实际的应用系统

《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一第一篇 执行计划

第一篇 执行计划 执行计划是指示Oracle如何获取和过滤数据.产生最终结果集,是影响SQL语句执行性能的关键因素.我们在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让SQL引擎为语句生成执行计划. 在深入了解执行计划之前,我们先了解SQL语句的处理执行过程.当一条语句提交到Oracle后,SQL引擎会分为三个步骤对其处理和执行:解析(Parse).执行(Execute)和获取(Fetch),分别由SQL引擎的不同组件完成.SQL引擎的组件如图1-1所示. 1. SQL

《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.5 执行计划中其他信息的含义

2.5 执行计划中其他信息的含义 通过DBMS_XPLAN输出执行计划,除了计划本身外,还可以获得一些其他信息帮助我们进一步分析执行计划及语句性能. 2.5.1 查询块和对象别名 在使用DBMS_XPLAN显示执行计划时,选择'ADVANCED'预定义格式作为参数或者加入'ALIAS'控制字符串,可以在输出中看到以下内容: Query Block Name / Object Alias (identified by operation id): -------------------------

主流开源SQL引擎总结,不断改进的Hive始终遥遥领先

本文涵盖了6个开源领导者:Hive.Impala.Spark SQL.Drill.HAWQ 以及Presto,还加上Calcite.Kylin.Phoenix.Tajo 和Trafodion.以及2个商业化选择Oracle Big Data SQL 和IBM Big SQL,IBM 尚未将后者更名为"Watson SQL". (有读者问:Druid 呢?我的回答是:检查后,我同意Druid 属于这一类别.) 使用SQL 引擎一词是有点随意的.例如Hive 不是一个引擎,它的框架使用Ma

主流大数据SQL引擎技术博弈,谁为王?

文章讲的是主流大数据SQL引擎技术博弈,谁为王,近日,AtScale公布了第四季度主流大数据SQL引擎的测试结果,主要针对Spark.Impala.Hive/Tez以及Presto. 测试结果证实了我们早已实践出的一些事情:Impala是中等大小数据库查询的最佳选择,并且已经积累了不少用户,Presto在这方面也做得不错.Hive和Spark更适用于长时间分析查询. AtScale产品管理方面副总Joshua Klar表示,许多公司客户使用两个引擎.通常他们认为Hive更稳定,并且更习惯于使用H

关于sql引擎 和 plsql引擎

oracle 使用2个引擎来执行SQL和代码块:SQL 引擎和PL/SQL 引擎, Oracle 使用这2个引擎来执行PL/SQL blocks 和 subprograms.那么在执行的时候,PL/SQL 引擎把DML 语句发送给SQL 引擎,然后由SQL 引擎执行,执行完毕后,SQL 引擎把结果集在发送给PL/SQL 引擎.因此在不同引擎之间切换就需要进行context switch,过多的context switch是会影响SQL性能的.而bulk (关于bulk,后续介绍)就是从减少引擎之

《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.2 内部函数与操作

2.2 内部函数与操作 实际上,在Oracle内部,执行计划的每一个数据源(Row Source)操作都与一个内部函数(qer<*>)相对应,而操作对象.谓词条件都是这些函数的参数.这些函数之间可以相互调用,也正是这些函数的调用关系,映射成为执行计划的树状关系.换句话说,一个执行计划告诉Oracle的内部引擎如何调用这些函数,以及传给函数的参数值.例如,在上述例子中,NESTED LOOPS获取数据的内部函数是qerjoFetch:TABLE ACCESS BY INDEX ROWID的内部函

《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一1.1 生成执行计划

1.1 生成执行计划 在Oracle中,任何一条语句在解析过程中都会生成一个唯一的数值标识,即SQL_ID.而同一条语句,在解析过程中,可能会因为执行环境的改变(例如某些优化参数被改变)而生成多个版本的游标,不同的游标会有不同的执行计划.每个游标都会按顺序赋予一个序列号,即CHILD_NUMBER,一条语句生成的第一个游标的CHILD_NUMBER为0:相应的,Oracle会为每个执行计划生成一个哈希值以作区分.而多个不同版本的游标,其执行计划可能会相同,也可能不同. 因此,我们可以知道,一条合

《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.4 执行计划各个操作的含义

2.4 执行计划各个操作的含义 通常我们所说的执行计划操作包含两个部分:操作与其选项.例如,哈希关联反关联(HASH JOIN ANTI)中,哈希关联(HASH JOIN)是一种操作,"反"关联(ANTI)则是其选项:该操作还可以与其他选项(如"半"关联,SEMI)配合形成不同的执行计划操作. 执行计划中的操作数量非常多.我们下面列出的操作是Oracle 10gR2中的绝大多数操作.Oracle的每个版本都会有一些新的特性出现,而其中一些新特性又会带来新的操作,或者