Атомарность ключей в таблице ksqlDB - PullRequest
1 голос
/ 09 июля 2020

Я хотел знать, есть ли способ добиться атомарности ключей в таблице ksqlDB? Итак, в основном мой вариант использования заключается в том, что я получаю несколько сообщений на kafka topi c, и я хочу применить их к таблице атомарно, чтобы материализованное представление было согласованным, поэтому, например, возьмите вариант использования, когда я сохраняю иерархию в таблице ksqlDB в разреженный формат:

введите описание изображения здесь

Теперь предположим, что k1 и k2 - составные ключи таблицы, а на kafka topi c публикуются следующие два сообщения:

{k1: k11, k2: 'All', v1: v111, v2: v211}, 
{k1: k11, k2: k21, v1: v121, v2: v221}

, и теперь я хочу убедиться что эти сообщения применяются к таблице ksqlDB атомарно, т.е. либо применяются оба сообщения, либо ни одно из них не применяется, так что моя таблица всегда согласована - возможно ли этого?

1 Ответ

0 голосов
/ 29 июля 2020

Короткий ответ, вероятно, нет.

На самом деле я не следую вашему примеру разреженного формата, приведенному в таблице 1. Не нужно объяснять?

Процесс ksqlDB и применяет каждое полученное событие индивидуально. У него нет никакого механизма для атомарного применения нескольких событий.

Я не знаю ни одного потокового движка, который мог бы атомарно применять два события. Потоки по определению бесконечны. Каким образом движок узнает, какие события должны применяться атомарно, а какие нет?

Если вы можете производить все обновления, которые должны применяться атомарно, вместе в одном сообщении, то это то, что ksqlDB потенциально может поддерживать применяя атомарно в будущем с помощью EXPLODE, как предлагается здесь: Есть ли гарантия, что все развернутые строки в потоке будут обновлены в таблице сразу? .

...