kafka connect可以直接创建stream吗?
Can kafka connect create stream directly?
我有一个场景,我需要在 Kafka 中导入整个数据库,并在数据库术语中创建一些关于用户可以查询的 table 的视图。我的要求是通过物理模型(tables)的视图重建逻辑模型。
因此我想知道执行此操作的步骤。
我的理想是 kafka Connect 创建对应于 table 的主题,然后紧接着,让我以声明方式(使用 KSQL)创建视图。
虽然我在这里描述的内容起初听起来可行,但我对主题中数据的结构(模式)数据有疑问。问题似乎是我可能不得不做额外的步骤,但想知道它是否可以避免或实际上是必要的。
更具体地说,视图通常表示 table 上的连接。我想如果我想在 table 上加入,我需要已经创建了 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创建的topic进行join吗?它是否能够解释这些主题中的数据结构(即 kafka 连接生成的模式)并对其执行连接,并将结果作为 Kstream 提供?
4 - 如果我的所有假设都是错误的,有人可以告诉我 KSQL/Kafka-stream/Kafka-connect 中我的问题所涉及的步骤吗?
1 - Hence the question, is there a way from Kafka connect to create Kstream or Ktable automatically ?
不,您需要手动执行此操作。但是,如果您使用的是 Avro,那么它只是一个简单的语句:
CREATE STREAM foo WITH (KAFKA_TOPIC='bar', VALUE_FORMAT='AVRO');
2 - Kafka connect as the notion of schema, how does that relate to the Kstream/KTable structure (schema) and format(json/avro/delimited) ?
KSQL 流(或 Table)= Kafka 主题加模式。
所以你有一个 Kafka 主题(例如,由 Kafka Connect 加载),你需要一个模式。最好的办法是在生成数据时只使用 Avro(例如从 Kafka Connect),因为该模式随后存在于模式注册表中,并且 KSQL 可以自动使用它。
如果您想使用 JSON 或 [shudder] 定界,那么您必须在声明 stream/table 时提供 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 - If Kafka connect can't create Kstream and KTable directly, can KSQL operate a join on the topics that Kafka connect create, directly ?
KSQL 可以连接流和表,是的。 stream/table 只是一个具有模式的 Kafka 主题。
Will it be able to interpret the structure of the data in those topics (i.e. kafka connect generated schema) and perform a join on it, and make the result available as a Kstream ?
是的。该架构由 Kafka Connect 提供,如果您使用 Avro,它 'just works'。如果使用 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 - If all my assumption are wrong, can someone give me the step of what my problem would entail in term of KSQL/Kafka-stream/Kafka-connect ?
我不认为你的假设是错误的。使用 Kafka Connect + KSQL,并 使用 Avro :)
这些参考资料可能会进一步帮助您:
我有一个场景,我需要在 Kafka 中导入整个数据库,并在数据库术语中创建一些关于用户可以查询的 table 的视图。我的要求是通过物理模型(tables)的视图重建逻辑模型。
因此我想知道执行此操作的步骤。
我的理想是 kafka Connect 创建对应于 table 的主题,然后紧接着,让我以声明方式(使用 KSQL)创建视图。
虽然我在这里描述的内容起初听起来可行,但我对主题中数据的结构(模式)数据有疑问。问题似乎是我可能不得不做额外的步骤,但想知道它是否可以避免或实际上是必要的。
更具体地说,视图通常表示 table 上的连接。我想如果我想在 table 上加入,我需要已经创建了 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创建的topic进行join吗?它是否能够解释这些主题中的数据结构(即 kafka 连接生成的模式)并对其执行连接,并将结果作为 Kstream 提供?
4 - 如果我的所有假设都是错误的,有人可以告诉我 KSQL/Kafka-stream/Kafka-connect 中我的问题所涉及的步骤吗?
1 - Hence the question, is there a way from Kafka connect to create Kstream or Ktable automatically ?
不,您需要手动执行此操作。但是,如果您使用的是 Avro,那么它只是一个简单的语句:
CREATE STREAM foo WITH (KAFKA_TOPIC='bar', VALUE_FORMAT='AVRO');
2 - Kafka connect as the notion of schema, how does that relate to the Kstream/KTable structure (schema) and format(json/avro/delimited) ?
KSQL 流(或 Table)= Kafka 主题加模式。
所以你有一个 Kafka 主题(例如,由 Kafka Connect 加载),你需要一个模式。最好的办法是在生成数据时只使用 Avro(例如从 Kafka Connect),因为该模式随后存在于模式注册表中,并且 KSQL 可以自动使用它。
如果您想使用 JSON 或 [shudder] 定界,那么您必须在声明 stream/table 时提供 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 - If Kafka connect can't create Kstream and KTable directly, can KSQL operate a join on the topics that Kafka connect create, directly ?
KSQL 可以连接流和表,是的。 stream/table 只是一个具有模式的 Kafka 主题。
Will it be able to interpret the structure of the data in those topics (i.e. kafka connect generated schema) and perform a join on it, and make the result available as a Kstream ?
是的。该架构由 Kafka Connect 提供,如果您使用 Avro,它 'just works'。如果使用 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 - If all my assumption are wrong, can someone give me the step of what my problem would entail in term of KSQL/Kafka-stream/Kafka-connect ?
我不认为你的假设是错误的。使用 Kafka Connect + KSQL,并 使用 Avro :)
这些参考资料可能会进一步帮助您: