Может ли kafka connect создать поток напрямую? - PullRequest
0 голосов
/ 06 июля 2019

У меня есть сценарий, в котором мне нужно импортировать целую БД в Kafka и создать в термине БД несколько представлений для тех таблиц, к которым пользователь может запросить запрос.Мои требования - перестроить логическую модель с помощью представлений физических моделей (таблиц).

Поэтому я задаюсь вопросом о том, как сделать это.

Моим идеалом было бы, чтобы kafka Connect создавал темы, соответствующие таблицам, а затем сразу после этого для меня декларативно (используя KSQL) создавать представления.

Хотя то, что я здесь опишу, поначалу звучит выполнимо, у меня есть проблема с данными, структурой (схемой) данных в темах.Кажется, проблема в том, что мне, возможно, придется сделать дополнительные шаги, но я думаю, можно ли этого избежать или это действительно необходимо.

В частности, представления обычно представляют объединение в таблице.Я полагаю, что если я хочу сделать соединение на столе, мне нужно, чтобы уже были созданы Ktable или Kstream, которые дают структуру, на которой будут выполняться объединения.Но если Kafka Connect просто создает темы, но не использует Ktable или Kstream, кажется, что необходимо выполнить дополнительные шаги, которые автоматически сделают эти темы доступными как Ktable или Kstream.В этот момент я могу использовать KSQL для создания представлений, которые будут представлять физическую модель.

1 - Отсюда вопрос, есть ли способ от Kafka connect автоматически создать Kstream или Ktable?

2 - Кафка подключается как понятие схемы, как это связано со структурой (схемой) и форматом Kstream / KTable (json / avro / delimited)?

3 - Если подключение Кафкине может создавать Kstream и KTable напрямую, может ли KSQL выполнять объединение по темам, которые Kafka Connect создает напрямую?Сможет ли он интерпретировать структуру данных в этих темах (т. Е. Сгенерированную схему kafka connect), выполнить объединение и сделать результат доступным как Kstream?

4 - Если все мои предположениянеправильно, может кто-нибудь дать мне шаг, который повлечет за собой моя проблема в терминах KSQL / Kafka-stream / Kafka-connect?

1 Ответ

1 голос
/ 08 июля 2019

1 - Отсюда вопрос, есть ли способ от Kafka connect автоматически создавать Kstream или Ktable?

Нет, вам нужно сделать это вручную. Но если вы используете Avro, тогда это просто утверждение:

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

2 - Кафка подключается как понятие схемы, как это связано со структурой (схемой) и форматом Kstream / KTable (json / avro / delimited)?

KSQL Stream (или Таблица) = Тема 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 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 :)

Эти ссылки могут помочь вам в дальнейшем:

...