Автор: Ханс-Петер Грахсл (@hpgrahsl) | Целевой релиз: ??? | Статус: Одобрено | Обсуждение: GitHub PR
Краткое содержание: Этот KLIP предлагает ввести новый параметр конфигурации для определения свойств функций, которые могут быть общими для группы / семейства (пользовательских) UDF, UDAF и/или UDTF, логически связанных друг с другом.
В настоящее время ksqlDB поддерживает два различных способа настройки (пользовательских) функций на основе записей, определённых в ksql-server.properties
:
либо свойства конфигурации напрямую связаны с одним конкретным классом UDF и применимы к потенциально существующим перегруженным методам — например, ksql.functions.<myudfname>.<mysetting>=foo
;
или мы можем иметь свойства, определённые в специальной области видимости, что делает их доступными глобально — например, ksql.functions._global_.<mysetting>=1234
.
Последний подход означает, что свойства доступны для чтения любой другой функцией, которая загружается во время начальной загрузки. Хотя это может быть проблемой или не быть в зависимости от типа свойств, в целом это можно считать менее чем идеальным. Например, это приводит к проблемам безопасности для конфиденциальных свойств конфигурации, таких как секреты / токены / пароли.
Этот KLIP направлен на то, чтобы позволить нескольким, но определённо заданным функциям — включая UDF, UDAF и UDTF — совместно использовать свойства конфигурации, отличные от «неправильного использования» глобальной области видимости свойств.
Область действия этого KLIP — не полная переработка текущих механизмов конфигурации, а модифицированная реализация, поддерживающая совместное использование свойств конфигурации между конкретными (пользовательскими) функциями (UDF, UDAF, UDTF).
Основная ценность этого KLIP заключается в том, что пользователи могут легко определять определённые свойства конфигурации, общие для N >= 2 функций. Это можно сделать без указания таких свойств несколько раз, один раз для каждой функции, нуждающейся в них, или без «неправильного использования глобальной области», оба из которых можно считать обходными путями в лучшем случае.
Не должно быть ни изменений в публичных API, ни каких-либо модификаций языка запросов KSQL. В идеале выбранная реализация позволяет обновлять существующие конфигурации / переносить их в более новые версии ksqlDB без изменений для конфигураций, привязанных к конкретным функциям.
Простой подход заключается в расширении метаданных функции и добавлении опции groups к аннотациям @UdfDescription
, @UdafDescription
и @UdtfDescription
, которая принимает список строк. Каждая строковая запись в groups явно определяет имя, используемое для логической группировки функций, для которых необходимо совместно использовать свойства конфигурации.
Учитывая следующий пример:
@UdfDescription(
name = "someudf",
description = "...",
author = "...",
version = "...",
groups = {"shareit"/*,"..."*/})
public class SomeUdf implements Configurable {
//...
}
позволяет настроить UDF с именем someudf с помощью ksql.functions.someudf.my.value.x=foo
(базовая конфигурация для одной UDF) или ksql.groups.functions.shareit.my.value.x=foo
(групповая конфигурация для нескольких функций, объявляющих одно и то же имя группы(и)). Это различие также делает очевидным, настроены ли свойства конфигурации для отдельных функций или нескольких групповых функций соответственно.
Недостатком подхода, основанного на метаданных, является то, что информация о группе должна быть объявлена в коде. Если это ограничение окажется проблемой, будущее улучшение может позволить явно определить информацию о группе в свойствах конфигурации следующим образом: ksql.groups.define.group_name=...,...
, что для приведённого выше примера будет читаться как ksql.groups.define.shareit=someudf
.
Преимущества этого дизайна:
Сценарии тестирования и сбоев довольно просты, они сосредоточены только на различных способах установки и чтения свойств конфигурации для функций (UDF, UDAF, UDTF). Нет необходимости в тестировании масштабируемости, нагрузки или производительности, поскольку этот KLIP не влияет на какие-либо критические области в этом отношении.
Этапы и вехи поставки
Определяются менеджером продукта и командой.
Обновления документации
Текущая документация, касающаяся параметров конфигурации пользовательских функций, не слишком конкретна, но, конечно, должна быть соответствующим образом обновлена.
Последствия совместимости
Предложение по дизайну предлагает решение, которое не должно привести к критическим изменениям для пользователей. Таким образом, реализация должна осуществляться с обратной совместимостью, чтобы она могла разумно поддерживать «старые» (то есть текущие) и «новые» (то есть предложенные здесь) параметры конфигурации параллельно.
Последствия для безопасности
Не должно быть негативных последствий для безопасности. Напротив, если область _global_
больше не нужно «злоупотреблять», чтобы (случайно) разделить чувствительные свойства конфигурации между всеми функциями, это может даже немного улучшить общую безопасность.
Отклоненные альтернативы
ksql.functions.my_udfgroup_*.some.value.x=foo
ksql.functions.otherudfs_*.other.value.y=1234
означает, что на основе подстановочного знака *
параметр some.value.x
будет доступен всем UDF, имена которых начинаются с my_udfgroup_
. Параметр other.value.y
доступен только для всех UDF, имеющих имя, начинающееся с otherudfs_*
.
ksql.functions.some.value.x=foo
ksql.functions._scope_.some.value.x=my_udfgroup_a,otherudfs_b
означает, что исходя из явно определённой области _scope_
для some.value.x
, это свойство будет доступно для двух указанных UDF: my_udfgroup_a
и otherudfs_b
. Параметр недоступен ни для одной UDF, если его область не была определена или пуста.
Конечно, можно также разрешить простое сопоставление с подстановочными знаками или сложные правила регулярных выражений для любой записи имени UDF, определённой в списке _scope_
.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )