【问题标题】:Can kafka connect create stream directly?kafka connect可以直接创建流吗?
【发布时间】:2019-11-16 15:42:13
【问题描述】:

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

因此我想知道执行此操作的步骤。

我的理想是 kafka Connect 创建与表相对应的主题,然后在此之后,让我以声明方式(使用 KSQL)创建视图。

虽然我在这里描述的内容起初听起来可行,但我对主题中的数据结构(模式)有疑问。问题似乎是我可能不得不做一些额外的步骤,但想知道它是否可以避免或实际上是必要的。

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

1 - 因此问题是,Kafka connect 有没有办法自动创建 Kstream 或 Ktable?

2 - Kafka 连接作为模式的概念,它与 Kstream/KTable 结构(模式)和格式(json/avro/delimited)有什么关系?

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

4 - 如果我的所有假设都是错误的,有人可以告诉我我的问题在 KSQL/Kafka-stream/Kafka-connect 方面的步骤吗?

【问题讨论】:

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


    【解决方案1】:

    1 - 因此问题是,Kafka connect 有没有办法自动创建 Kstream 或 Ktable?

    不,您需要手动执行此操作。但是,如果您使用的是 Avro,那么这只是一个简单的声明:

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

    2 - Kafka 连接作为模式的概念,它与 Kstream/KTable 结构(模式)和格式(json/avro/delimited)有什么关系?

    KSQL 流(或表)= Kafka 主题加模式。

    因此,您有一个 Kafka 主题(例如,由 Kafka Connect 加载),并且您需要一个模式。最好的办法是在生成数据时使用 Avro(例如来自 Kafka Connect),因为模式随后存在于模式注册表中,并且 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 连接生成的模式)并对其执行连接,并将结果作为 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 :)

    这些参考资料可能会进一步帮助您:

    【讨论】:

      猜你喜欢
      • 2019-02-02
      • 2019-07-15
      • 2020-10-08
      • 2020-05-28
      • 2020-05-25
      • 2020-06-23
      • 2020-11-11
      • 2020-06-05
      • 1970-01-01
      相关资源
      最近更新 更多