неключевое соединение с GlobalTable против Ktable-Ktable Join? - PullRequest
0 голосов
/ 09 июля 2019

Мне довольно любопытно, почему неключевое соединение работает с GlobalKTtable против KTable-KTable ?Хотя я понимаю, почему нам не нужно совместное разбиение для globalKTable (BroadCast Join), я не понимаю, что позволяет с ним подключаться без ключа?Может кто-нибудь, дать примерное представление о происходящем?

1 Ответ

1 голос
/ 09 июля 2019

GlobalKTable и KTable, оба представляют абстракцию журнала изменений, но разница в том, что KTable создается локально для каждого экземпляра приложения для каждого раздела, в то время как GlobalKTable заполняется полными данными из всех разделов в каждом экземпляре приложения. Он копирует все данные в каждом экземпляре приложения, что означает, что весь набор данных доступен для запросов в каждом экземпляре. Следовательно, он не требует совместного разбиения, и поиск возможен во всей таблице.

В следующем примере:

KStream<String, Long> left = ...;  // // KStream has string type key
GlobalKTable<Integer, Double> right = ...;   // GlobalKTable has integer type key

// Java 8+ example, using lambda expressions
KStream<String, String> joined = left.leftJoin(right,
    (leftKey, leftValue) -> leftKey.length(), /* derive a (potentially) new key by which to lookup against the table */
    (leftValue, rightValue) -> "left=" + leftValue + ", right=" + rightValue /* ValueJoiner */
  );

Выберите ключ из левого потока, используя KeyValueMapper, который вы можете использовать для поиска в GlobalKTable, как указано ниже:

(leftKey, leftValue) -> leftKey.length(), /* select a (potentially) new key by which to lookup against the table */

GlobalKTable удобны для объединений, но дороги, поскольку требуют больше памяти по сравнению с KTables, а также увеличивают нагрузку на брокера сети и kafka.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...