Предварительное исследование DataGen, мощного инструмента тестирования для Flink | Техническая команда JD Cloud

Что такое Flinksql

Flink SQL построен на основе анализатора и оптимизатора SQL Apache Calcite, поддерживает стандарт ANSI SQL и позволяет использовать стандартные операторы SQL для обработки потоковых и пакетных данных. С помощью Flink SQL логику обработки данных можно описать декларативно без написания явного кода. Используя Flink SQL, вы можете выполнять различные операции с данными, такие как фильтрация, агрегация, соединение и преобразование и т. д. Он также предоставляет такие функции, как оконные операции, обработка времени и сложная обработка событий для удовлетворения потребностей потоковой обработки данных.

Flink SQL предоставляет множество расширенных функций и синтаксиса для адаптации к характеристикам механизмов потоковой и пакетной обработки Flink. Это абстракция Flink самого высокого уровня, которую можно легко интегрировать с API DataStream и DataSet API, используя возможности распределенных вычислений Flink и механизм отказоустойчивости.

Основные шаги по использованию Flink SQL для обработки данных:

  1. Определите входную таблицу: используйте оператор CREATE TABLE, чтобы определить входную таблицу, указать схему таблицы (поля и типы) и источник данных (например, Kafka, файл и т. д.).

  2. Выполнение запросов SQL. Используйте операторы SQL, такие как SELECT и INSERT INTO, для выполнения запросов к данным и операций. В SQL-запросах можно использовать различные встроенные функции, операции агрегирования, оконные операции, атрибуты времени и т. д.

  3. Определите выходную таблицу: используйте оператор CREATE TABLE, чтобы определить выходную таблицу, указать схему таблицы и целевое хранилище данных (например, Kafka, файл и т. д.).

  4. Отправить задание: отправьте SQL-запрос Flink как задание Flink в кластер Flink для выполнения. Flink автоматически построит план выполнения на основе логики и конфигурации запроса и передаст задачи обработки данных диспетчеру задач в кластере для выполнения.

Таким образом, мы можем обрабатывать потоковые и пакетные данные с помощью запросов и операций Flink SQL. Он предоставляет возможность упростить и ускорить разработку обработки данных, особенно для разработчиков и инженеров по обработке данных, знакомых с SQL.

что такое разъем

Flink Connector — это компонент, используемый для подключения внешних систем и источников данных. Это позволяет Flink взаимодействовать с различными источниками данных через определенные коннекторы, такие как базы данных, очереди сообщений, файловые системы и т. д. Он решает такие задачи, как связь с внешними системами, преобразование формата данных, чтение и запись данных и т. д. Будь то таблица входных данных или таблица выходных данных, к данным во внешних системах можно получить доступ и манипулировать ими в Flink SQL с помощью соответствующих соединителей. В настоящее время платформа реального времени предоставляет множество часто используемых коннекторов:

Например:

  1. JDBC: используется для установления соединений с реляционными базами данных (такими как MySQL, PostgreSQL) и поддерживает чтение и запись данных из таблиц базы данных в Flink SQL.

  2. JDQ: используется для интеграции с JDQ и может читать и записывать данные в темах JDQ.

  3. Elasticsearch: для интеграции с Elasticsearch данные можно записывать или считывать из индекса Elasticsearch.

  4. Файловый соединитель: используется для чтения и записи данных в различных форматах файлов (например, CSV, JSON, Parquet).

  5. ......

Также существуют HBase, JMQ4, Doris, Clickhouse, Jimdb, Hive и т. д., используемые для интеграции с различными источниками данных. Используя Flink SQL Connector, мы можем легко взаимодействовать с внешними системами, импортировать данные в Flink для обработки или экспортировать результаты обработки во внешние системы.

Соединитель генератора данных

DataGen — это встроенный соединитель, предоставляемый Flink SQL для создания смоделированных тестовых данных для использования во время разработки и тестирования.

Используя DataGen, вы можете генерировать данные с различными типами данных и распределениями, например целые числа, строки, даты и т. д. Это позволяет моделировать сценарии реальных данных и помогает проверять и отлаживать запросы и операции Flink SQL.

демо

Ниже приведен простой пример использования функции DataGen:

-- 创建输入表
CREATE TABLE input_table (
 order_number BIGINT,
 price DECIMAL(32,2),
 buyer ROW<first_name STRING, last_name STRING>,
 order_time TIMESTAMP(3)
) WITH (
 'connector' = 'datagen',
);

В приведенном выше примере мы создали входную таблицу с именем `input_table`, используя коннектор DataGen. Таблица содержит четыре поля: «номер_заказа», «цена» и «покупатель», «время_заказа». По умолчанию выбрано случайное создание соответствующего типа данных случайным образом, а скорость производства составляет 10 000 элементов в секунду. Пока задача не останавливается, данные будут создаваться непрерывно. Конечно, вы также можете указать некоторые параметры для определения правил генерации данных, например количество строк, генерируемых в секунду, тип данных и распределение полей.

Образец сгенерированных данных:

{"order_number":-6353089831284155505,"price":253422671148527900374700392448,"buyer":{"first_name":"6e4df4455bed12c8ad74f03471e5d8e3141d7977bcc5bef88a57102dac71ac9a9dbef00f406ce9bddaf3741f37330e5fb9d2","last_name":"d7d8a39e063fbd2beac91c791dc1024e2b1f0857b85990fbb5c4eac32445951aad0a2bcffd3a29b2a08b057a0b31aa689ed7"},"order_time":"2023-09-21 06:22:29.618"}
{"order_number":1102733628546646982,"price":628524591222898424803263250432,"buyer":{"first_name":"4738f237436b70c80e504b95f0d9ec3d7c01c8745edf21495f17bb4d7044b4950943014f26b5d7fdaed10db37a632849b96c","last_name":"7f9dbdbed581b687989665b97c09dec1a617c830c048446bf31c746898e1bccfe21a5969ee174a1d69845be7163b5e375a09"},"order_time":"2023-09-21 06:23:01.69"}

Поддерживаемые типы

Тип поля Метод генерации данных
БУЛЕВОЕ значение случайный
ЧАР случайный / последовательность
ВАРЧАР случайный / последовательность
НИТЬ случайный / последовательность
ДЕСЯТИЧНАЯ ДРОБЬ случайный / последовательность
ТИНЬИНТ случайный / последовательность
СМАЛЛИНТ случайный / последовательность
ИНТ. случайный / последовательность
БИГИНТ случайный / последовательность
ПЛАВАТЬ случайный / последовательность
ДВОЙНОЙ случайный / последовательность
ДАТА случайный
ВРЕМЯ случайный
ВРЕМЯ случайный
TIMESTAMP_LTZ случайный
ИНТЕРВАЛ ИЗ ГОДА ИЗ МЕСЯЦА случайный
ИНТЕРВАЛ ДЕНЬ КО МЕСЯЦА случайный
РЯД случайный
МНОЖЕСТВО случайный
КАРТА случайный
МУЛЬТИСЕТ случайный

Свойства соединителя

Атрибуты Требуется ли это? значение по умолчанию тип описывать
разъем необходимый (никто) Нить «датаген».
строк в секунду необязательный 10000 Длинный скорость производства данных
количество строк необязательный (никто) Длинный Укажите количество создаваемых элементов данных. Значение по умолчанию — без ограничений.
поля.#.вид необязательный случайный Нить Укажите метод формирования данных для поля: случайный или последовательный.
поля.#.мин необязательный (Минимальное значение типа) (Тип поля) Генератор случайных чисел задает минимальное значение поля #, поддерживает числовой тип.
поля.#.макс необязательный (Максимальное значение типа) (Тип поля) Указанное поле генератора случайных чисел# Максимальное значение, поддерживается числовой тип
поля.#.длина необязательный 100 Целое число Длина типов char/varchar/string/array/map/multiset.
поля.#.start необязательный (никто) (Тип поля) начальное значение генератора последовательности
поля.#.конец необязательный (никто) (Тип поля) Конечное значение генератора последовательности

Генератор данных использует

Теперь, когда вы понимаете основы использования dategen, давайте попрактикуемся в использовании других типов соединителей.

Сценарий 1: создание 100 миллионов фрагментов данных в таблице кустов.

CREATE TABLE dataGenSourceTable
 (
 order_number BIGINT,
 price DECIMAL(10, 2),
 buyer STRING,
 order_time TIMESTAMP(3)
 )
WITH
 ( 'connector'='datagen', 
 'number-of-rows'='100000000',
 'rows-per-second' = '100000'
 ) ;


CREATECATALOG myhive
WITH (
 'type'='hive',
 'default-database'='default'
);
USECATALOG myhive;
USE dev;
SETtable.sql-dialect=hive;
CREATETABLEifnotexists shipu3_test_0932 (
 order_number BIGINT,
 price DECIMAL(10, 2),
 buyer STRING,
 order_time TIMESTAMP(3)
) PARTITIONED BY (dt STRING) STORED AS parquet TBLPROPERTIES (
 'partition.time-extractor.timestamp-pattern'='$dt',
 'sink.partition-commit.trigger'='partition-time',
 'sink.partition-commit.delay'='1 h',
 'sink.partition-commit.policy.kind'='metastore,success-file'
);
SETtable.sql-dialect=default;
insert into myhive.dev.shipu3_test_0932
select order_number,price,buyer,order_time, cast( CURRENT_DATE as varchar)
from default_catalog.default_database.dataGenSourceTable;

Когда в секунду производится 100 000 фрагментов данных, это можно выполнить примерно за 17 минут. Конечно, мы можем выполнить это быстрее, увеличив вычислительные узлы задачи Flink, степень параллелизма, увеличив значение скорости производства' строк в секунду» и т. д. Производство больших объемов данных.

Сценарий 2: непрерывно создавать 100 000 сообщений в секунду в очереди сообщений.

CREATE TABLE dataGenSourceTable (
 order_number BIGINT,
 price INT,
 buyer ROW< first_name STRING, last_name STRING >,
 order_time TIMESTAMP(3),
 col_array ARRAY < STRING >,
 col_map map < STRING, STRING >
 )
WITH
 ( 'connector'='datagen', --连接器类型
 'rows-per-second'='100000', --生产速率
 'fields.order_number.kind'='random', --字段order_number的生产方式
 'fields.order_number.min'='1', --字段order_number最小值
 'fields.order_number.max'='1000', --字段order_number最大值
 'fields.price.kind'='sequence', --字段price的生产方式
 'fields.price.start'='1', --字段price开始值
 'fields.price.end'='1000', --字段price最大值
 'fields.col_array.element.length'='5', --每个元素的长度
 'fields.col_map.key.length'='5', --map key的长度
 'fields.col_map.value.length'='5' --map value的长度
 ) ;
CREATE TABLE jdqsink1
 (
 order_number BIGINT,
 price DECIMAL(32, 2),
 buyer ROW< first_name STRING, last_name STRING >,
 order_time TIMESTAMP(3),
 col_ARRAY ARRAY < STRING >,
 col_map map < STRING, STRING >
 )
WITH
 (
 'connector'='jdq',
 'topic'='jrdw-fk-area_info__1',
 'jdq.client.id'='xxxxx',
 'jdq.password'='xxxxxxx',
 'jdq.domain'='db.test.group.com',
 'format'='json'
 ) ;
INSERTINTO jdqsink1
SELECT*FROM dataGenSourceTable;

думать

Как видно из приведенных выше случаев, данные из различных сценариев можно моделировать с помощью Datagen в сочетании с другими коннекторами.

  • Тестирование производительности : мы можем использовать высокую производительность обработки Flink для отладки порога внешних зависимостей задач (тайм-аут, ограничение тока и т. д.) до подходящего уровня воды, чтобы избежать эффекта бочки слишком большого количества внешних зависимостей на наших задачах;
  • Тестирование граничных условий : мы используем Flink DataGen для генерации специальных тестовых данных, таких как минимальные значения, максимальные значения, нулевые значения, повторяющиеся значения и т. д., чтобы проверить правильность и надежность задачи Flink в граничных условиях;
  • Тестирование целостности данных : мы используем Flink DataGen для создания наборов данных, содержащих неверные или ненормальные данные, например неверные форматы данных, отсутствующие поля, повторяющиеся данные и т. д. Это позволяет вам протестировать способность задачи Flink обрабатывать нештатные ситуации и проверить, может ли задача Flink правильно поддерживать целостность данных при их обработке.

Короче говоря, Flink DataGen — это мощный инструмент, который может помочь тестировщикам создавать различные типы тестовых данных. При правильном использовании тестировщики могут проводить тестирование более эффективно и обнаруживать потенциальные проблемы и дефекты.

Автор: JD Retail Ши Пу

Источник: Сообщество разработчиков JD Cloud. При перепечатке указывайте источник.

Автор открытого фреймворка NanUI перешёл на продажу стали, и проект был приостановлен.Список бесплатных бесплатных приложений номер один в Apple App Store занимает порнографическое ПО TypeScript.Он только стал популярным, почему большие парни начинают от него отказываться ? Октябрьский список TIOBE: Наибольший спад в Java, C# приближается к выпуску Java Rust 1.73.0 Мужчину подтолкнула его подруга-ИИ к убийству королевы Англии, и он был приговорен к девяти годам тюремного заключения Qt 6.6 официально выпущен Reuters: RISC-V Технология становится ключом к китайско-американской технологической войне Новое поле битвы RISC-V: Lenovo не контролируется какой-либо отдельной компанией или страной и планирует выпустить ПК на базе Android
{{o.name}}
{{м.имя}}

Supongo que te gusta

Origin my.oschina.net/u/4090830/blog/10117339
Recomendado
Clasificación