我们有一个用例,其中业务逻辑要求我们连接来自不同数据库的表,并将最终结果推送到输入主题。
table1 from schema1 in database1 table2 from schema2 in database2
业务逻辑 SELECT a,b FROM table1 INNER JOIN table2 ON table1.c = table2.d;
在这里 a
来自 table1
以及 b
来自 table2
,输入主题中消息的值如下所示 { "payload":{ "a":xyz,"b":xyz} }
有没有办法用一个jdbc源连接器来达到这个要求?
附言:
我已经提到了jdbc-kafka连接器可以从多个数据库中提取数据吗?但是在accepted answer中,消息被推送到input主题,而没有实现任何业务逻辑。有了这个实现,我们将无法按照我们的要求将消息推送到输入主题。
另一种方法是使用kafka流,即从每个表将消息推送到输入主题,并在kafka流应用程序级别处理连接逻辑。但是我们正在寻找一个解决方案,如果我们可以在连接器级别本身实现逻辑?
1条答案
按热度按时间vyswwuz21#
简短回答:不,您不能以这种方式使用jdbc源连接器。
回答:jdbc源连接器可以为每个连接器示例连接到一个数据库。您有几个选择:
将两个表的内容流到kafka中,并使用ksqldb(或者kafka streams,如果您愿意)连接它们,并将结果数据推送到新的kafka主题。
自己编写一个新的连接器插件,连接到两个数据库并进行连接(这听起来是个糟糕的主意)
如果数据库支持,请使用远程连接(例如oracle的db链接)和jdbc源连接器的
query
选项。根据数据量和查询复杂性,我个人会选择选项1。ksqldb非常适合这里。