kafka connect可以直接创建流吗?

时间:2019-07-06 09:03:34

标签: apache-kafka-streams apache-kafka-connect ksql

我有一种情况,我需要在Kafka中导入整个数据库,并在DB术语中创建用户可以查询的那些表上的一些视图。我的要求是通过物理模型(表)之外的视图来重建逻辑模型。

因此,我想知道这样做的步骤。

我的理想情况是,kafka Connect创建与表相对应的主题,然后在那之后,让我声明性地(使用KSQL)创建视图。

虽然我在这里描述的内容起初听起来是可行的,但我对数据有一个问题,即主题内的数据结构(架构)。看来问题是我可能必须执行一些额外的步骤,但想知道是否可以避免或确实需要这样做。

更具体地说,视图通常表示表上的联接。我想如果我想在表上进行联接,则需要已经创建了Ktable或Kstream,它们提供了进行联接的结构。但是,如果Kafka connect仅创建主题,而不创建Ktable或Kstream,则似乎需要执行一些额外的步骤,这些步骤会自动使这些主题作为Ktable或Kstream可用。此时,我可以使用KSQL创建表示物理模型的视图。

1-因此,问题是,从Kafka连接是否可以自动创建Kstream或Ktable?

2-Kafka连接作为架构的概念,这与Kstream / KTable结构(模式)和format(json / avro / delimited)有何关系?

3-如果Kafka connect无法直接创建Kstream和KTable,KSQL可以直接对Kafka connect创建的主题进行联接吗?它能否解释这些主题中的数据结构(即kafka connect生成的架构)并对其执行联接,并将结果作为Kstream提供?

4-如果我所有的假设都是错误的,那么有人可以让我一步一步解决我在KSQL / Kafka-stream / Kafka-connect方面会遇到的问题吗?

1 个答案:

答案 0 :(得分:1)

  

1-因此,问题是,从Kafka连接可以自动创建Kstream或Ktable吗?

否,您需要手动执行。但是,如果您使用的是Avro,那么这只是一个简单的语句:

CREATE STREAM foo WITH (KAFKA_TOPIC='bar', VALUE_FORMAT='AVRO');

  

2-Kafka连接作为架构的概念,这与Kstream / KTable结构(模式)和format(json / avro / delimited)有何关系?

KSQL流(或表)= Kafka主题加架构。

因此,您有一个Kafka主题(例如,由Kafka Connect加载),并且需要一个模式。最好的办法是在生成数据时(例如从Kafka Connect获得)使用Avro,因为该模式随后存在于Schema Registry中,并且KSQL可以自动使用它。

如果要使用JSON或[ shudder ]分隔,则在声明流/表时必须在KSQL中提供架构。而不是上面的声明,您将拥有类似的

CREATE STREAM foo (COL1 INT, COL2 VARCHAR, COL3 INT, COL4 STRUCT<S1 INT,S2 VARCHAR>) 
WITH (KAFKA_TOPIC='bar_json',VALUE_FORMAT='JSON');
  

3-如果Kafka connect无法直接创建Kstream和KTable,KSQL可以直接对Kafka connect创建的主题进行联接吗?

KSQL可以连接流和表,是的。流/表只是带有模式的Kafka主题。

  

是否能够解释这些主题中的数据结构(即kafka connect生成的架构)并对其执行联接,并将结果作为Kstream提供?

是的。该架构由Kafka Connect提供,如果您使用的是Avro,它“就可以正常使用”。如果使用JSON,则需要如上所述手动输入架构。

例如,KSQL联接的输出是一个Kafka主题

CREATE STREAM A WITH (KAFKA_TOPIC='A', VALUE_FORMAT='AVRO');
CREATE TABLE B WITH (KAFKA_TOPIC='B', VALUE_FORMAT='AVRO', KEY='ID');

CREATE STREAM foobar AS 
SELECT A.*, B.* FROM 
A LEFT OUTER JOIN B ON A.ID = B.ID;
  

4-如果我的所有假设都是错误的,那么有人可以让我一步一步解决我的问题吗(用KSQL / Kafka-stream / Kafka-connect来表示)?

我认为您的假设不对。使用Kafka Connect + KSQL,然后使用Avro :)

这些参考文献可能会进一步帮助您: