Как разделить один входной поток на несколько тем и гарантировать одновременное использование - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу создать простое приложение, основанное на данных датчика, с Apache Kafka. Мой вопрос очень прост и связан с основной концепцией apache kafka. Я начинающий в Apache Kafka.

Вот мое требование:

Я получаю данные датчика через байтовый массив с различными данными внутри. Например, массив состоит из трех элементов (температура 1, температура 2 и напряжение). Вот один пример с 4 массивами и значениями данных. Каждый массив имеет определенную временную метку.

Массив 1: [1, 2, 3]

Массив 2: [4, 5, 6]

Массив 3: [7, 8, 9]

Массив 4: [10, 11, 12]

Теперь я хочу прочитать эти массивы и создать сообщения для трех тем:

  • тема-TEMP1

  • тема-temp2

  • Тема напряжения

Порядок изготовления:

  • Считать массив 1
  • создать сообщение для topic-temp1 (значение = 1)
  • создать сообщение для topic-temp2 (значение = 2)
  • создать сообщение для темы-напряжения (значение = 3)

  • Считать массив 2

  • создать сообщение для topic-temp1 (значение = 4)
  • создать сообщение для topic-temp2 (значение = 5)
  • создать сообщение для темы-напряжения (значение = 6)

  • Считать массив 3

  • создать сообщение для topic-temp1 (значение = 7)
  • создать сообщение для topic-temp2 (значение = 8)
  • создать сообщение для темы-напряжения (значение = 9)

... Чтение массива n ...

После этого у меня есть 3 темы с различными данными внутри:

  • topic-temp1: 1, 4, 7, 10

  • topic-temp2: 2, 5, 8, 11

  • тема-напряжение: 3, 6, 9, 12

Теперь на мой вопрос: Я хочу создать программное приложение, которое использует эти 3 темы. Я хочу отобразить 3 графика (temp1, temp2, напряжение) в одной диаграмме. Ось Y - это значение сигнала, а ось X - это временная метка.

Как я могу гарантировать, что я получу потребленные значения в то же время? Только я могу наложить графики.

  • 1,2,3

  • 4,5,6

  • 7,8,9

  • 10,11,12

Должен ли я использовать Kafka-Stream API? Одна тема входного потока (байтовый массив) и три темы выходного потока? Как обеспечить совместное производство этих трех значений и их совместное использование?

Или я должен использовать простой потребительский API и получить доступ к данным через значение смещения. потому что смещение должно быть одинаковым для записей (1,2,3) (4,5,6) ..., потому что я произвел их в этом порядке?

Заранее спасибо!

1 Ответ

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

Я предлагаю вам использовать одну тему о датчиках с полезной нагрузкой имени датчика (или предпочтительно UUID), чтобы вы знали , какой датчик отправил данные и данные, которые он генерирует, как одно целое сообщение ,

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

Ваш ключ сообщения может быть UUID / именем, и вы можете масштабировать его до сотен разделов

Вы можете двоично кодировать данные, которые вы отправляете, но я буду использовать строку JSON для иллюстрации

{
 "sensor_id" : "some unique name", 
 "temperatures" [1,2],
 "voltage": 3
}

Если вам нужны три темы из этого, вы можете очень легко создать три темы вывода, используя Kafka Streams или KSQL

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

...