У меня такой сценарий:
- Таблица A и Таблица B соединены с помощью FK.
- Транзакционная вставка / обновление как в A, так и в B.
- Debezium генерирует одно событие
a
для таблицы A и одно событиеb
для таблицы B. - Kafka Streams создает KStream для таблиц A и B.
- Приложение Kafka Streams
leftJoin
KStreams A и B. (Предположим, что записиa
иb
имеют одинаковые ключи и попадают в окно соединения). - Выходные записи будут
[a, null], [a, b]
.
Как отказаться от [a, null]
?
Можно выполнить innerJoin
, но это все равно будет проблемой в случае update
запросов.
Мы попытались использовать метку времени события для фильтрации (т.е. сохранить событие с последней меткой времени), но уникальность метки времени не гарантируется.
т.е. Конечная цель - иметь возможность идентифицировать последний агрегированный показатель, чтобы мы могли отфильтровывать промежуточные результаты во время запроса (либо в Athena / Presto, либо в какой-либо СУБД).
filter()
после присоединения? Также обратите внимание, что поддержка соединений по внешнему ключу - это WIP atm: cwiki.apache.org/confluence/display/KAFKA/ - person Matthias J. Sax   schedule 12.05.2019filter
, но не хочу полагаться на детали реализации, что вставка всегда будет транзакционной. Подумайте о двух последовательных вставках, это будут два события, и для соединения KStream-KStream они выведут 2 записи вместо одной, которую я хочу. - person Ashhar Hasan   schedule 13.05.2019eventCreatedAt
, но это, очевидно, то же самое (и не гарантируется, что оно будет увеличиваться) для событий в той же транзакции. - person Ashhar Hasan   schedule 13.05.2019