使用Presto查询Kafka主题的方法

643 阅读2分钟

Presto是一个分布式查询引擎,可以使用SQL查询不同的数据源,如Kafka、MySQL、MongoDB、Oracle、Cassandra、Hive等。它有能力分析大数据并一起查询多个数据源。

在这篇文章中,我们将讨论如何用Presto来查询Kafka主题。下面是设置Presto和Kafka的步骤,并将它们连接在一起。在这里,我考虑的是MacOS,但类似的设置也可以在任何其他系统上完成。

前提条件

  • 一台安装了Homebrew和Java的MacOS机器。

安装Presto

  • 安装Presto。
$ brew install presto
  • Presto默认会被安装在**/usr/local/Cellar/prestodb** 。
  • 以下4个配置文件将被默认创建在**/usr/local/Cellar/prestodb/<presto版本>/libexec/etc**。- node.properties
    - jvm.config
    - config.properties
    - log.properties

注意:上述文件中的设置可以根据需求进行更新。虽然,对于基本的工作,默认的设置就足够了。所以我们可以不改变这些设置,继续进行。这里,Presto版本指的是已经下载的Presto的最新版本。一个目录由该名称创建(例如,0.270)。因此,在这种情况下,实际路径将是/usr/local/Cellar/prestodb/0.270/libexec/etc

  • 数据源连接器需要在**/usr/local/Cellar/prestodb/<presto版本>/libexec/etc/catalog**创建。默认情况下,一个连接器(JMX)被创建。其他的连接器可以根据需求来设置。我们将在本文后面的章节中介绍这个问题。
  • 启动Presto服务器。
$ presto-server start

注意:上述命令将在后台启动Presto服务器。或者,使用下面的命令在前台启动Presto服务器。有时,在前台运行服务器是很有用的,可以检查是否有导致服务器启动失败的问题。任何启动问题都会显示在控制台日志中,可以进行调试。

$ presto-server run
  • 使用下面的命令在任何时候停止Presto服务器$ presto-server stop.注意: 另外,Presto服务器可以在前台运行时使用ctrl+c
  • 在Presto服务器运行时,访问Presto Web UI,http://localhost:8080
  • Presto CLI作为Presto安装的一部分自动下载在**/usr/local/Cellar/prestodb/<presto版本>/libexec**。它是以可执行jar的形式存在的(例如:presto-cli-0.270-executable.jar)。
  • 为方便起见,将CLI jar重命名为 "presto"。
$ mv presto-cli-0.270-executable.jar presto
  • 给CLI提供执行权限。
$ chmod +x presto
  • 启动Presto CLI。如果CLI启动成功,将出现Presto提示。
$ ./presto --server localhost:8080 --catalog <catalog name>
presto>

注意: 这里,目录名称指的是数据源连接器(例如,Kafka、MySQL、jmx等)。

如果你能无缝地启动Presto服务器、Presto UI和Presto CLI,这意味着Presto设置成功了。

Kafka安装

  • 安装Kafka。
$ brew install kafka
  • 启动Zookeeper服务(在终端1)。
$ zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
  • 启动Kafka代理服务(在终端2)。
$ kafka-server-start /usr/local/etc/kafka/server.properties
  • 创建一个主题(在终端3)。
$ kafka-topics --create --topic test_events --bootstrap-server localhost:9092
  • 启动Kafka生产者(在终端3)并将事件写入上述主题。
$ kafka-console-producer --topic test_events --bootstrap-server localhost:9092
  • 启动Kafka消费者(在终端4)并从上述主题中读取事件。
$ kafka-console-consumer --topic test_events --from-beginning --bootstrap-server localhost:9092

如果你能够无缝地生产和消费事件,这意味着Kafka设置成功了,我们可以继续前进。

将Presto连接到Kafka并查询Kafka主题

  • 在**/usr/local/Cellar/prestodb/<presto版本>/libexec/etc/catalog** 设置Kafka连接器,创建文件kafka.properties并在其中添加以下配置。
connector.name=kafka
kafka.nodes=localhost:9092
kafka.table-names=test_schema.test_events
kafka.hide-internal-columns=false

注意: 确保上述设置中没有尾部的空白,否则Presto服务器可能无法成功启动。在kafka.table-names中,提供Kafka主题名称(逗号分隔)。可以选择将模式名称作为主题名称的前缀。如果没有模式名称的前缀,主题表将进入默认模式。

  • 在创建上述连接器后,重新启动Presto服务器。每次添加新的连接器或更新现有的连接器时,Presto服务器都需要重新启动,以获得最新的设置。
$ presto-server start
  • 启动Presto CLI。
$ ./presto --server localhost:8080 --catalog kafka --schema test_schema
presto:test_schema>

**注意:**另外,启动Presto CLI可以不提供模式,模式可以事后选择。

$ ./presto --server localhost:8080 --catalog kafka
presto> use test_schema;
presto:test_schema>
  • 执行SQL查询。
presto:test_schema> select * from test_events;
  • 产生新的事件到上述Kafka主题,并看到它们出现在上述查询的结果中。
$ kafka-console-producer --topic test_events --bootstrap-server localhost:9092
>message1
>message2
>message3

如果你能够无缝地产生和查询事件,这意味着上述设置是成功的。

结语

这就把我们带到了本文的结尾。我们看到了如何设置Presto和Kafka并使用Presto查询Kafka主题。这也可以通过JDBC连接(jdbc:presto://localhost:8080/kafka/test_schema)来编程完成。

kafka Presto(SQL查询引擎)