2

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

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

Если я иду с первым случаем, когда мы будем создавать тему на устройство тогда,

DEVICE1 (датчик A, B, C) -> topic1

устройство2 (датчик A, B, C) - > topic2

  1. Сколько тем я могу создать?
  2. Будет ли эта модель масштабной?

Случай 2: где, отправка данных в одной теме

устройство1 (датчик А, В, С), устройство2 (датчик А, В, С) .... DeviceN .... -> тема

  1. Не будет ли это узким местом для данных. Поскольку он будет вести себя как данные очереди от некоторого датчика, он будет отставать в очереди и не будет обрабатываться в реальном времени.

  2. Будет ли эта модель масштабной?

РЕДАКТИРОВАТЬ

Допустим, каждое устройство связано с пользователем (многие к одному). Поэтому я хочу обрабатывать данные в соответствии с устройствами. Таким образом, я хочу обрабатывать данные, каждое устройство и его данные датчика будут отправляться пользователю после некоторой обработки.

Скажем, я следующая

устройство1

-> Датчик A - Topic1 Раздел 1

-> Датчик B - Topic1 Раздел 2

устройство2

-> Датчик A - Topic2 Partition 1

-> Датчик B - Topic2 Partition 2

Мне нужен какой-то паб/подтип поведения. Поскольку устройства могут быть добавлены или удалены, также можно добавлять или удалять датчики. Есть ли способ создавать эти темы и разбивать их на лету.

Если не kafka, то какой паб/суб будет подходящим для такого поведения.

ответ

4

Это зависит от вашей семантики:

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

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

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

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

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

В качестве альтернативы, возможно, будет работать одна тема с несколькими разделами и, и фиксированное сопоставление от устройства/датчика к разделу - с помощью пользовательского разделителя. В этом случае добавление новых разделов не представляет проблемы, поскольку вы контролируете распределение данных и можете сохранять его стабильным.

+0

Согласовано. Лучший маршрут - метаданные демультиплексирования в каждом сообщении. – PragmaticProgrammer

0

Я хотел бы создать темы на основе датчиков и перегородок на основе устройств:

A sensor on Device 1 -> topic A, partition 1. 
A sensor on Device 2 -> topic A, partition 2. 
B sensor on Device 2 -> topic B, partition 2. 

и так далее.

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

Но это зависит от того, как вы хотите обрабатывать данные: важно ли более важно обрабатывать датчики вместе или устройства?

+0

Я хочу обрабатывать устройства вместе. См. Править – big