Перейти к содержимому
Последнее обновление

Lookup Join

Lookup Join позволяет повысить производительность соединений с таблицами измерений во Flink. При использовании Flink JDBC Connector для соединений с таблицами измерений могут возникнуть следующие проблемы:

  • Flink JDBC Connector использует синхронный режим запросов: при поступлении каждой записи из вышестоящего источника данных (например, Kafka) сразу выполняется запрос к таблице измерений Doris, что приводит к высокой задержке при большом числе параллельных запросов.
  • Запросы через JDBC обычно выполняют точечный поиск по одной записи, тогда как Doris рекомендует пакетные запросы для повышения эффективности.

Использование Lookup Join во Flink Doris Connector даёт следующие преимущества:

  • Кэширование входящих данных пакетами позволяет избежать высокой задержки и нагрузки на базу данных, вызванных запросами для каждой отдельной записи.
  • Асинхронное выполнение запросов для соединения таблиц повышает пропускную способность обработки данных и снижает нагрузку от запросов к Doris.

Пример​

Для таблицы измерений необходимо задать jdbc-url, через который выполняются запросы Lookup. Включите кэширование с помощью параметров lookup.cache.*:

CREATE TABLE fact_table (
`id` BIGINT,
`name` STRING,
`city` STRING,
`process_time` as proctime()
) WITH (
'connector' = 'kafka',
...
);

create table dim_city(
`city` STRING,
`level` INT,
`province` STRING,
`country` STRING
) WITH (
'connector' = 'doris',
'fenodes' = '127.0.0.1:8030',
'jdbc-url' = 'jdbc:mysql://127.0.0.1:9030',
'table.identifier' = 'dim.dim_city',
'username' = 'root',
'password' = '',
'lookup.cache.max-rows' = '100000',
'lookup.cache.ttl' = '300s'
);

SELECT a.id, a.name, a.city, c.province, c.country, c.level
FROM fact_table a
LEFT JOIN dim_city FOR SYSTEM_TIME AS OF a.process_time AS c
ON a.city = c.city

Параметры​

КлючЗначение по умолчаниюОбязательныйОписание
lookup.cache.max-rows-1НетМаксимальное количество строк, кэшируемых при lookup. Значение по умолчанию -1 означает, что кэширование отключено.
lookup.cache.ttl10sНетМаксимальное время хранения данных в кэше lookup. Значение по умолчанию: 10s.
lookup.max-retries1НетКоличество повторных попыток после сбоя запроса lookup.
lookup.jdbc.asyncFALSEНетОпределяет, включён ли асинхронный lookup. По умолчанию false.
lookup.jdbc.read.batch.size128НетМаксимальный размер пакета для одного запроса при асинхронном lookup.
lookup.jdbc.read.batch.queue-size256НетРазмер промежуточной буферной очереди при асинхронном lookup.
lookup.jdbc.read.thread-size3НетКоличество потоков JDBC для lookup в каждой задаче.