Присоединяются ли данные, поступающие в тему GlobalKTable? - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть две темы со следующими данными:

<ClientId, ClientConfiguration> configurationTopic;
<ClientId, User> userTopic;

ClientId - это просто строка UUID.

Тема конфигурации довольно мала и может быть сжата, потому что мы заботимся только о самой последней конфигурации для любого клиента.

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

То, что мне нужно, - это в любое время, когда мы получаем обновленного пользователя (созданного, обновленного, удаленного), и я хочу повторно обработать этого пользователя с использованием последней конфигурации клиента. Если ClientConfiguration обновляется, мне нужно повторно обработать эту конфигурацию для каждого пользователя. Я понимаю, что это может повторно обработать много данных, но это должно быть хорошо, если работа может быть распределена по нескольким потребителям.

Я пытался превратить ConfigurationTopic в глобальный KTable, который позволил бы мне разделить пользователей на темы, используя циклический подход. Хотя информации о том, как работают GlobalKTables, очень мало.

С здесь :

Данные, поступающие в GlobalKTable, не будут инициировать соединение.

Это правда? И если это правда, как я могу спроектировать это соединение, чтобы делать то, что мне нужно?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Если ClientConfiguration обновляется, мне нужно повторно обработать эту конфигурацию для каждого пользователя.

Мое текущее понимание GlobalKTable состоит в том, что единственный способ добиться такого поведения - просто (?) Отправить каждого пользователя снова на userTopic.

Это было бы именно то, что Kafka Streams будет делать в любом случае, так что вместо Kafka Streams это ваша работа.

0 голосов
/ 04 ноября 2018

Данные, поступающие в таблицу GlobalKTable, не будут вызывать соединение.

Да, это так.

Если ClientConfiguration обновляется, мне нужно повторно обработать эту конфигурацию для каждого пользователя.

Если это подразумевает, что вы хотите seekToBeginning() из userTopic и перечитать эти данные, то вы не можете использовать для этого объединения из потоков Кафки.


Некоторые материалы в Интернете о присоединениях:

...