【问题标题】:How to split one input stream to multiple topics and guarantee the simultaneously consuming如何将一个输入流拆分为多个主题并保证同时消费
【发布时间】:2019-04-17 09:12:17
【问题描述】:

我想用 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 (value=1) 生成消息
  • 向 topic-temp2 (value=2) 生成消息
  • 向主题电压(值=3)生成消息

  • 读取数组 2

  • 向 topic-temp1 (value=4) 生成消息
  • 向 topic-temp2 生成消息(值 = 5)
  • 向主题电压(值=6)生成消息

  • 读取数组 3

  • 向 topic-temp1 (value=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) ...的偏移量应该相同,因为我是按这个顺序生成的?

提前谢谢你!

【问题讨论】:

    标签: apache-kafka kafka-consumer-api apache-kafka-streams kafka-producer-api


    【解决方案1】:

    我建议您使用带有传感器名称(或者最好是 UUID)有效负载的传感器响应主题,这样您就可以知道哪个传感器发送了数据,以及它生成的数据作为一个整体信息。

    否则,纯粹通过时间戳连接数据似乎并不能证明是失败的。

    您的消息键可以是 UUID/名称,您可以将其扩展到数百个分区

    您可以对要发送的数据进行二进制编码,但我将使用 JSON 字符串进行说明

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

    如果您想要三个主题,您可以使用 Kafka Streams 或 KSQL 轻松创建三个输出主题

    否则,继续创建单独的主题,但添加 ID/名称以便您可以加入其中,使用 时间窗口 以秒或分钟为单位,而不是尝试调整滞后位置一个事件只是微秒关闭,你不能加入消息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-26
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 2017-02-23
      相关资源
      最近更新 更多