Сообщение слияния потоков Кафки - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть данные, которые слишком велики для одного сообщения.Рассмотрим avro:

record Likes {...}
record Comments {...}
record Post {
  Likes likes;
  Comments comments;
  string body;
}

Предположим, лайки и комментарии - это большие коллекции, и если передать их вместе с постом, он превысит максимальный размер сообщения, который я считаю неправильным, увеличивая до 10-20 МБ.

Я хочу разделить одно сообщение на три: тело сообщения, комментарии и лайки.Тем не менее, я хочу, чтобы вставка базы данных была атомарной - поэтому я хочу сгруппировать и объединить эти сообщения в потребительской памяти.

Могу ли я сделать это с kafka-streams?Могу ли я иметь поток без темы вывода (поскольку выходное сообщение снова будет превышать максимальный размер).

Если у вас есть идеи, предполагающие одинаковые входные данные (одно большое сообщение превышает настроенный максимальный размер сообщения), пожалуйста, поделитесь

1 Ответ

2 голосов
/ 29 апреля 2019

Да, вы можете сделать это с помощью kafka-streams, объединяя сообщения в хранилище данных, и вы можете создать поток без темы вывода. Вы должны быть уверены, что три части идут в один и тот же раздел (чтобы перейти в один и тот же экземпляр приложения), чтобы они, вероятно, имели одинаковый ключ.

Вы также можете использовать три темы для каждого объекта, а затем присоединиться к ним. (Опять с тем же ключом).

Но, как правило, Kafka предназначен для обработки большого количества маленьких сообщений и плохо работает с большими сообщениями. Может быть, стоит подумать об отправке не всей информации в одном сообщении, а дополнительных изменений, только информации, которая была обновлена.

...