在 Kafka 流作业中进行同步数据库查询或 restful 调用是一种好习惯吗?

Posted

技术标签:

【中文标题】在 Kafka 流作业中进行同步数据库查询或 restful 调用是一种好习惯吗?【英文标题】:Is it a good practice to do sync database query or restful call in Kafka streams jobs? 【发布时间】:2018-08-21 12:03:23 【问题描述】:

我使用Kafka Streams处理实时数据,在Kafka Streams任务中,我需要访问mysql查询数据,并且需要调用另一个restful服务。

所有操作都是同步的。

恐怕同步调用会降低流任务的处理能力。

这是一个好习惯吗?或者有什么好主意吗?

【问题讨论】:

这取决于您要实现的目标以及数据库级别需要哪些操作,但是我建议您查看 Kafka JDBC 连接器,以便您可以将数据从 MySQL 流式传输到 Kafka 和然后用 Kafka Streams 做任何你想做的事情。 @GiorgosMyrianthous 我编辑问题以清楚地描述我的问题,非常感谢。 MySQL查询到的数据需要做什么? 对于一些旧系统,它的数据存储在MySQL中。我需要查询 MySQL 的一些配置等等。 如前所述:推荐使用 Kafka Connect 将数据加载到主题中,并将数据作为KTable(或者可能是GlobalKTable)读取到您的应用程序中。您可以通过连接进行查找。 【参考方案1】:

更好的方法是将您的 MySQL 表流式传输到 Kafka,然后访问那里的数据。这具有将您的流应用程序与 MySQL 数据库分离的优势。如果您将来离开 MySQL,只要数据仍然从其随后所在的任何位置写入 Kafka 主题,您的流应用程序就不会受到影响。如果您只是存储在 MySQL 中的配置,您甚至可以采用某些人使用的模式,即使用 Kafka 作为数据的 存储(使用日志压缩,永久保留它)。

【讨论】:

以上是关于在 Kafka 流作业中进行同步数据库查询或 restful 调用是一种好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

kafka连接器两种部署模式详解

kafka connector

通过Pipelinedb使用SQL查询Kafka实时流数据

如何在火花结构化流式读取流中倒带 Kafka 偏移

如何从程序中停止 flink 流作业

Kafka JDBC连接器加载所有数据,然后增量